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