Laravel 5 уже вышел, но страх перемен захватывает всех. Мы продолжаем слышать, как люди жалуются на некоторые радикальные изменения. Мол, почему эта новая структура папок? Будет ли мое приложение сломаться, если я сделаю composer update
?
В этой статье мы рассмотрим, как перенести существующее приложение Laravel 4 в Laravel 5 и понять новую структуру папок.
Установка
Мое существующее приложение 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
.