Статьи

Laravel 4 до Laravel 5 — простое руководство по обновлению

Laravel 5 уже вышел, но страх перемен захватывает всех. Мы продолжаем слышать, как люди жалуются на некоторые радикальные изменения. Мол, почему эта новая структура папок? Будет ли мое приложение сломаться, если я сделаю composer update ?

В этой статье мы рассмотрим, как перенести существующее приложение Laravel 4 в Laravel 5 и понять новую структуру папок.

Laravel Logo

Установка

Мое существующее приложение Laravel 4 является демонстрацией из предыдущей статьи об использовании Google Analytics API . Приложение не имеет слишком много кода, но оно сделает работу для нашего урока.

Давайте сначала установим Laravel 5 на наш компьютер и создадим временную папку для нашей версии приложения Laravel 4.

 composer create-project laravel/laravel --prefer-dist 

Я предпочитаю устанавливать Laravel через composer, но вы можете посетить документацию, чтобы узнать больше об установщике Laravel.

Вы можете использовать коробку Vagrant из хранилища или использовать Homestead Improved . Если все идет хорошо, вы должны увидеть страницу приветствия Laravel 5.

Конфигурационные файлы

Старая папка app/config теперь находится в корне вашего приложения, поэтому мы должны переместить наш app/config/analytics.php в config/analytics.php . Учетные данные вставляются непосредственно в файл, так почему бы не использовать переменные среды.

 // config/analytics.php return [ 'app_name' => env('app_name'), 'client_id' => env('client_id'), 'client_secret' => env('client_secret'), 'api_key' => env('api_key') ]; 
 // .env app_name='YOUR APP NAME' client_id='YOUR CLIENT ID' client_secret='CLIENT SECRET' api_key='API KEY' 

Файл .env загружается автоматически и может использоваться для отделения конфигурации локальной среды от производства, тестов и т. Д.

Маршрутизация

Маршруты Laravel 4 зарегистрированы внутри app/routes.php . В Laravel 5 все, что связано с HTTP, сгруппировано в папке app/Http , включая маршруты, поэтому давайте переместим наш app/routes.php в app/Http/routes.php .

фильтры

Laravel 5 перешел от фильтров к промежуточному программному обеспечению , поэтому, если у вас есть какие-либо фильтры внутри маршрутов, убедитесь, что вы переключились на промежуточное программное обеспечение.

 Route::get('/report', ['middleware' => 'auth', function() { // }]); 

Если у вас есть собственный фильтр, вы можете перенести его в промежуточное ПО. У меня есть промежуточное программное обеспечение GoogleLogin которое я использую в своих маршрутах, реализация будет выглядеть следующим образом.

 // app/Http/Middleware/GoogleLogin.php class GoogleLogin { public function handle($request, Closure $next) { $ga = \App::make('\App\Services\GoogleLogin'); if (!$ga->isLoggedIn()) { return redirect('login'); } return $next($request); } } 
 // app/Http/Kernel.php protected $routeMiddleware = [ 'google_login' => 'App\Http\Middleware\GoogleLogin', ]; 
 // app/Http/routes.php Route::any('/search', ['middleware' => 'google_login', 'as' => 'search', 'uses' => 'GoogleController@search']); 

Промежуточное ПО защиты CRSF добавлено по умолчанию. Если вы хотите удалить его, вы можете перейти в файл app/Http/Kernel.php и закомментировать правильную строку.

Контроллеры

Поскольку наши контроллеры считаются частью логики Http, нам нужно переместить наше app/controllers/* в app/Http/Controllers и разместить их пространство имен с помощью App\Http\Controllers . Последняя проблема, которую вам нужно исправить, — это заменить BaseController на класс Controller .

Если вам не нравится корневое пространство имен App , вы можете изменить его глобально, используя следующую команду ремесленника.

 php artisan app:name MyApp 

Миграции

Наше приложение Google Analytics не взаимодействует с локальной базой данных, но стоит упомянуть процесс обновления.

Каталог app/database теперь находится в папке /database , и вам нужно только переместить туда свой файл. Каталог уже содержит users и таблицу password_resets которые вы можете удалить или обновить в зависимости от ваших потребностей.

модели

Папка моделей из Laravel 4 исчезла, и в качестве примера Laravel 5 помещает модель User непосредственно в папку app . Вы также можете скопировать туда свои модели и присвоить им пространство имен с помощью App .

Однако, если вам не нравится идея иметь там свои модели, вы можете создать новую папку в каталоге app под названием Models , но не забывайте пространство имен ваших классов с пространством имен App\Models .

 namespace App\Models; class User extends Eloquent {} 

Сервисы приложений

Наша папка src содержит GA_Service и класс GA_Utils . Если мы считаем их сервисами, мы можем поместить их в app/Services . В противном случае мы можем создать новую папку с именем app/GA где мы будем хранить наши классы обслуживания. Это вызовет проблему, поскольку сначала мы не использовали автозагрузку PSR-4, поэтому нам нужно обновить ссылки на классы внутри контроллера, добавив соответствующее новое пространство имен.

Взгляды

Представления приложений перемещаются из папки app/views папку resources/views .

Папка resources также содержит папку lang для локализации вашего приложения и папку assets для ваших внешних ресурсов. В Laravel 5 представлен Elixir, который адаптирует программу запуска Gulp к среде разработки Laravel.

Композитор

Убедитесь, что вы скопировали зависимости вашего приложения от композитора и выполните все необходимые обновления. Для нашей демонстрации я собираюсь переместить мой "google/apiclient": "1.1.*" В новый composer.json и выполнить composer update чтобы отразить изменения.

Формы и HTML

Пакет illuminate/html удаляется из установки по умолчанию на Laravel 5, и вам нужно будет установить его отдельно.

Чтобы вернуть HTML-хелперы в ваш проект, вам нужно добавить пакет "illuminate/html": "5.0.*" ваш composer.json и запустить composer update , затем вам нужно добавить 'Illuminate\Html\HtmlServiceProvider' в ваш config/app.php провайдеров config/app.php . Если вы хотите использовать фасады Html и Form внутри своих шаблонов config/app.php , вы можете добавить следующие фасады к вашему config/app.php .

 // config/app.php 'aliases' => [ 'Form'=> 'Illuminate\Html\FormFacade', 'HTML'=> 'Illuminate\Html\HtmlFacade', ], 

Вывод

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

Вам не нужно переходить на новую структуру папок, и вы можете сохранить старую и обновлять только зависимости компоновщика, но это не рекомендуемый способ сделать это. Если у вас есть какие-либо вопросы или комментарии, обязательно оставьте их ниже. Для получения дополнительной информации см. Полное руководство по обновлению версии .