Статьи

Что нового в Laravel 4

Laravel — это PHP-фреймворк, использующий шаблон MVC. Конечно, таких проектов много, и я не собираюсь сравнивать Laravel с другими фреймворками в этой статье. Вместо этого я собираюсь поделиться с вами, что нового в новейшей версии Laravel — Laravel 4.

Отделенные компоненты

Laravel 4 не содержит много кода, как вы можете видеть на его странице GitHub . Фактически, проект приложения просто регистрирует сервисы, которые он использует. Это самое большое изменение в Laravel 4; вместо того, чтобы весь код был упакован в одном репозитории, функциональность разделена на так называемые Illuminate Components. Проект приложения просто использует Composer для управления зависимостями, с которыми мы знакомы по ретро-Laravel: система Controller / Routing, Object Relational Mapper с именем Eloquent и просмотр управления с помощью движка шаблонов Blade. Теперь все они организованы как отдельные компоненты и отделены с помощью сервисных локаторов .

Может быть, вы не впечатлены, и, возможно, вы спрашиваете себя: «Ух ты, не так ли? Что в этом такого? ». В том, что при истинной развязке мы можем выбрать нужные нам компоненты Illuminate и использовать их в нашем собственном проекте. Итак, вы просто ищете хороший ORM, но вам не нужны система маршрутизации, представления, разбиение на страницы и почтовый компонент? Нет проблем, вы можете использовать то, что вы хотите. Вы просто берете то, что вам нужно, а не всю «надежную» структуру.

Создание «нормального» проекта

Для пользователей, которые хотят использовать полный фреймворк как всегда, просто загрузите этот репозиторий: github.com/illuminate/app.git . После этого установите Composer и перейдите в каталог, где находится код, и запустите composer update Это даст вам все зависимости Laravel. Внутри каталога app

Маршруты

Как и раньше, маршруты определены в файле routes.php Вы можете вернуть все, что захотите, хотя учтите, что для контроллеров Laravel больше не использует магическое переименование. В Laravel 3 вы можете вызвать метод контроллера следующим образом:

 <?php
Route::get('/', 'home@index');

Контроллер получил название HomeController Но теперь вы должны использовать:

 <?php
Route::get('/', 'HomeController@index');

Хотя это не может показаться улучшением, это действительно так. Например, если вы используете компонент маршрута в качестве автономной библиотеки, вы не обязаны соблюдать соглашения об именах Laravel.

Лучший код через тестирование

Критики предыдущих версий Laravel утверждали, что его код никогда не сможет достичь высокого качества. Используя много статических методов для создания красивого и чистого кода, разработчики должны были пожертвовать тестируемостью проекта. Основной разработчик (Тейлор Отвелл) отлично справился с балансировкой простого кода и тестируемости, но это правда, что код никогда не может быть полностью протестирован.

Эта эра заканчивается сейчас. Используя контейнер IoC для регистрации всех компонентов, все можно полностью протестировать. Каждый компонент имеет тесты для большинства своих функций, и с каждым коммитом эти тесты проверяются Travis CI. Чтобы сохранить чистый способ вызова компонентов, Laravel использует шаблон фасада .

Контейнер и его привязки

Когда вы создаете проект Laravel, вы используете контейнер IoC для разрешения всех зависимостей. Класс ApplicationIlluminateContainer Хотя вы используете фасады для вызова методов компонентов, вы все равно можете привязывать объекты к контейнеру, чтобы сделать их доступными во всем приложении. Например:

 <?php
App::bind('hello', function()
{
return "Hello to you, sir";
});

Route::get('/', function()
{
return App::make('hello');
});

Здесь мы связали функцию, которая возвратила строку «Привет тебе, сэр» в «привет» в контейнере.

Контейнер также позволяет нам лениво связывать объекты, не глядя на аргументы его конструктора. Это можно сделать с помощью Reflection . Например:

 <?php
Class writer
{
public function write()
{
return 'A good day to you, sir';
}
}

Class helloWorld
{
protected $writer;

public function __construct (Writer $writer)
{
$this->writer = $writer;
}

public function write()
{
return $this->writer->write();
}
}

Route::get('/', function()
{
return App::make('helloWorld')->write();
});

Вы можете видеть, что Laravel автоматически разрешает наши зависимости путем создания нового класса WriterhelloWorld Если вы хотите, чтобы в качестве аргумента использовался конкретный экземпляр Writer, вы также можете привязать этот объект к контейнеру, используя подход, показанный в предыдущем примере.

Улучшенный CLI

Знаменитый CLI от Laravel, известный под именем Artisan, также получил некоторые значительные улучшения. Используя компонент командной строки от Symfony, Artisan теперь демонстрирует более дружелюбное поведение. Например, вы можете получить все доступные команды, просто выполнив artisan list

Новые возможности базы данных

Для компонента базы данных, который большинство пользователей Laravel будут использовать в своих проектах, наиболее заметным обновлением является заполнение базы данных. Если вы перейдете в каталог app/databaseseeds

Чтобы показать вам эту функцию, сначала нам понадобится тестовая таблица базы данных для работы. Итак, установите детали вашего соединения в app/config/database.phpappphp artisan migrate:install Затем запустите php artisan migrate:make create_comments_table --create="comments"comments

Загляните в каталог app/database/migrations Мы можем использовать построитель схем, чтобы нам не приходилось использовать необработанные запросы SQL. В методе up()

 <?php
public function up()
{
Schema::create('comments', function($table)
{
$table->increments('id');
$table->string('title');
$table->text('body');
$table->integer('author');
});
}

И в методе down()

 <?php
Public function down()
{
Schema::drop('comments');
}

Сохраните ваш файл и запустите php artisan migrate

Теперь давайте сделаем семя. Семя — это своего рода тестовые данные, которые вы хотите вставить в свою базу данных для тестирования вашего приложения. Создайте новый файл с именем comments.phpdatabase/seed

 <?php
return [
[
'title' => 'hello there',
'body' => 'I wish you a warm welcome',
'author' => '5'
],
[
'title' => 'Another hello',
'body' => 'I want to greet you another time',
'author' => '1'
]
];

Код представляет многомерный массив, где каждый массив-член является записью. Теперь выполните php artisan db:seed Теперь ваша база данных заполнена (содержит тестовые данные)! Вы можете делать это каждый раз, когда выполняете миграцию.

Использование автономных компонентов

Как я уже говорил ранее, самое большое обновление новой платформы — это наличие отдельных компонентов. Laravel использует экземпляр IlluminateFoundationApplication Последний может быть отредактирован в app.phpconfig

Я уверен, что в будущем будет много проектов для упаковки компонентов Laravel и использования их в вашем проекте. Одним из примеров является Capsule , который предоставляет нам несколько методов для доступа к компонентам. Прямо сейчас поддерживается только компонент базы данных, но это изменится в будущем. Например, соединение с базой данных может быть установлено с помощью следующего кода:

 <?php
CapsuleDatabaseConnection::make('main', [
//database credentials
], true);

Теперь вы можете выполнять беглые запросы , используя статические методы класса CapsuleDB Для документации, посмотрите на проект на GitHub.

Молодец!

Я думаю, что разработчики Laravel снова проделали большую работу, внеся некоторые существенные улучшения в фреймворк. Тестируемость больше не является проблемой, и ни одна из них не разделяет. Laravel 4 вполне может быть одной из лучших (если не самой лучшей) PHP-фреймворков, доступных в настоящее время, благодаря тяжелой работе всех разработчиков.