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 .
Если вам не нравится корневое пространство имен 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 всегда зависит от размера вашего приложения, и, возможно, этот процесс будет намного длиннее, чем этот пример для вашего конкретного случая. В этой статье мы попытались объяснить общий процесс, который должен заботиться о большинстве, если не обо всех вещах, которые нуждаются в изменении.
Вам не нужно переходить на новую структуру папок, и вы можете сохранить старую и обновлять только зависимости компоновщика, но это не рекомендуемый способ сделать это. Если у вас есть какие-либо вопросы или комментарии, обязательно оставьте их ниже. Для получения дополнительной информации см. Полное руководство по обновлению версии .
