{{TOC}} Ещё в ((https://laravel-news.com/2014/09/laravel-5-0/ сентябре)) Тейлор Отвелл объявил, что Laravel 4.3 будет переименован в Laravel 5, чтобы отразить изменения каталогов и "другие интересные новшества". После этого не прекращается волнение вокруг Laravel 5, а "другие интересные новшества" превратились в почти два десятка новых функций, которые помогут разработчикам быть более продуктивными. Некоторые ((https://laravel-news.com/2014/10/use-laravel-4-5/ не спешат обновляться)) и терпеливо ожидают в стороне. Другие уже несколько месяцев назад погрузились с головой в разрабатываемую ветку, тщательно просматривая коммиты в поисках критических изменений. Но скоро всё это закончится, потому что Laravel только что объявил, что на следующей неделе официально выйдет Laravel 5. >>#L5. На следующей неделе. ((https://twitter.com/laravelphp/status/560112591868276736 @laravelphp)) << Эти три слова вызвали большое волнение, и не зря. Месяцы затраченного времени и усердной работы вложены в эту версию, и она, наконец, готова к выходу. Laravel 5 - значительное обновление с большим количеством новых фишек, но в то же время в нём сохраняется то, что сделало Laravel невероятно успешным. На самом деле новых возможностей так много, что всех их трудно отследить. В этой статье я опишу новые возможности и то, на что вам стоит обратить внимание на следующей неделе. == Структура каталогов Laravel 5 == Первое существенное изменение - структура каталогов. Папка приложения внешне преобразилась, и некоторые вещи были вынесены за пределы приложения. В том числе настройки, база данных, хранилище и ресурсы. То, что находится внутри приложения, теперь разбито на следующие папки: * Commands (Команды) * Console (Консоль) * Events (События) * Exceptions (Исключения) * Handlers (Обработчики) * Http * Providers (Поставщики услуг) * Services (Услуги) Если вы привыкли к предыдущим версиям Laravel, то это может застать вас врасплох. Но уверяю вас, примерно через два дня использования всё станет ясным и простым. Для получения дополнительной информации прочитайте ((http://mattstauffer.co/blog/laravel-5.0-directory-structure-and-namespace эту статью)) Мэтта Штоффера. == Изменения Blade == В Blade сделано не так много изменений, но ((https://laravel-news.com/2014/09/laravel-5-0-blade-changes/ одно из них)) довольно существенно. В Laravel 4 Blade включал два следующих стиля: %%{{%% и %%{{{%%. Двойные фигурные скобки служили для вывода сырой информации, а тройные - для экранирования. Теперь и двойные и тройные фигурные скобки экранируют переменную, а для сырого вывода служит новый стиль %%(t){!! $var !!}%%. Типичный пример использования сырого вывода - вспомогательные методы формы: %%(t) {!! Form::open() !!} %% == Контракты == Контракты - это набор интерфейсов, которые определяют базовые услуги, предоставляемые фреймворком. Поэтому они могут служить в качестве документации по функциям фреймворка. Тем не менее, они гораздо более полезны, и вы можете прочесть ((док5:contracts официальную документацию)) для получения дополнительной информации о них и о том, как они могут помочь. == Команды и события == Команды и события были переделаны. Эти функции подробно описаны как в ((док5:bus документации)), так и в следующих материалах: * ((https://laracasts.com/lessons/laravel-5-events Видео о событиях Laravel 5)) * ((https://laracasts.com/lessons/laravel-5-commands Видео о командах Laravel 5)) * ((http://mattstauffer.co/blog/laravel-5.0-commands-and-handlers Команды и обработчики)) * ((http://mattstauffer.co/blog/laravel-5.0-events-and-handlers События и обработчики)) == Фасады и вспомогательные методы == Фасады по-прежнему есть в Laravel 5, но новые вспомогательные функции начинают замещать некоторые из наиболее распространённых элементов. Например, в Laravel 4 для отрисовки представления использовался такой код: %% View::make('path.to.view'); %% Теперь это простой вызов функции: %% view('path.to.view'); %% Вот ещё несколько: * %%abort()%% * %%action()%% * %%app()%% * %%app_path()%% * %%asset()%% * маршрутизация – %%get()%%, %%delete()%%, %%put()%% * %%back()%% * %%redirect()%% * %%response()%% * и многие другие… == Маршруты == В маршрутах две новые функции. ((http://mattstauffer.co/blog/laravel-5.0-route-caching Кэширование маршрутов)) и ((http://mattstauffer.co/blog/laravel-5.0-middleware-filter-style промежуточное ПО)). Мэтт проделал отличную работу, описав обе эти функции так, что мне просто нечего добавить. Прочитайте его статьи, чтобы разобраться в этом глубже. == Внедрение метода контроллера == Laravel 4 поддерживал внедрение конструктора контроллера. Разработчики пошли дальше, и теперь вы можете использовать любые зависимости на основе подсказок типов в ваших методах: %% public function store(Request $request) %% или вообще что угодно: %% public function taxes(TaxCalculator $tax) %% Вот ссылки для более глубокого изучения: * ((док5:controllers#внедрение Официальная документация)) * ((http://mattstauffer.co/blog/laravel-5.0-method-injection Мэтт Штоффер)) == ((https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D1%84%D1%84%D0%BE%D0%BB%D0%B4%D0%B8%D0%BD%D0%B3 Скаффолдинг)) авторизации == Процесс авторизации по умолчанию предварительно настроен и готов к использованию. Вникнуть во всё это теперь легче, чем когда-либо. Появилось два новых типажа (trait): * AuthenticatesAndRegistersUsers * ResetsPasswords Прелесть в том, что вы можете использовать имеющиеся или переопределить любые методы типажей, чтобы настроить их под своё приложение. == Socialite == Socialite - необязательный пакет Laravel 5.0, который упрощает работу с OAuth. Все мы его ненавидим, правда? В данный момент Socialite поддерживает работу с Facebook, Twitter, Google и GitHub. В ((док5:authentication#социальная официальной документации)) более подробная информация о реализации и принципе работы пакета. == Flysystem == Следующее замечательное новшество - включение в состав фреймворка пакета ((https://github.com/thephpleague/flysystem Flysystem)) от Фрэнка де Джонга. Если вы не знакомы с этим пакетом, я расскажу. Это абстракция файловой системы, которая позволяет вам легко подменять локальную ФС на удалённую. Сейчас имеются следующие адаптеры: * Local * Amazon Web Services – S3 * Rackspace Cloud Files * Dropbox * Copy * Ftp * Sftp (через phpseclib) * Zip (через ZipArchive) * WebDAV (через SabreDAV) * Azure Blob Storage * NullAdapter Это значит, что вы легко сможете выгружать файлы во все эти сервисы и использовать внешнее хранилище проще, чем когда-либо. Я думаю, что это само по себе сэкономит огромное количество времени для разработки большинства приложений. == dotenv - определение среды == Ванс Лукас создал PHP-пакет ((GIT:../vlucas/phpdotenv PHP dotenv)), который автомагически загружает переменные среды из %%(t).env%% в %%getenv()%%, %%$_ENV%% и %%$_SERVER%%. Этот пакет встроен в Laravel 5, чтобы значительно упростить управление средами. Больше не надо редактировать %%(t)bootstrap/start.php%% и настраивать массив %%(t)$app->detectEnvironment()%%. Вместо этого вы создаёте собственный файл %%(t).env%%, и легко можете настраивать его под свои нужды. А затем в любом файле настроек вы можете использовать что-то подобное: %% 'database' => env('DB_DATABASE’, 'myproddb'), %% Вы также можете создать дополнительные файлы для различных сред, например для тестирования. Кстати у Laracasts уже есть пример ((GIT:../laracasts/Behat-Laravel-Extension-Example-App интеграции behat)), в котором это уже используется. == Запросы формы == О проверке ввода и запросах формы уже много сказано. Это такая область, о которой, я уверен, вы уже наслышаны. В целом авторизация и проверка ввода могут быть превращены в FormRequests и легко внедрены. Взгляните на следующие материалы, чтобы узнать больше об этой возможности: * ((http://mattstauffer.co/blog/laravel-5.0-form-requests Запросы форм)) * ((https://laracasts.com/series/whats-new-in-laravel-5/episodes/3 Laracasts запросы формы и проверка ввода)) == Laravel Elixir == Elixir - это новая обёртка для gulp, упрощающая работу с активами. Вместо того, чтобы стараться создать собственную систему для создания css и js-файлов, вы можете использовать Elixir и легко запускать ваше приложение. Прямо из коробки Elixir обрабатывает 90% всего, что вам необходимо: sass, less, coffeescript, JavaScript, версионность файлов и многое другое. * ((https://laracasts.com/series/whats-new-in-laravel-5/episodes/10 Laracasts видео об Elixir)) * ((https://laravel-news.com/2014/10/setting-laravel-elixr-bootstrap/ Настройка Elixir с помощью Bootstrap)) == Laravel Scheduler == ((https://laravel-news.com/2014/11/laravel-5-scheduler/ Laravel Scheduler)) (планировщик) создан для упрощения задач, которые необходимо запускать через CRON. Надо только настроить одно cron-задание, которое вызывает %%(sh)artisan schedule:run%%, и запланировать его выполнение на каждую минуту. После настройки cron вы можете планировать запуск любых задач в краткой и дружелюбной форме. Это устраняет неприятную необходимость запоминания планирования в cron, и это действительно очень просто. Эти планирования созданы в вашей папке %%(t)app/Console/Commands%%. Вот пример задачи: %% $schedule->command('cache:clear') ->hourly() ->sendOutputTo($filePath) ->emailOutputTo('john@doe.com'); %% Анонс этой функции был встречен множеством смешанных реакций. Я из тех, кто считает её прекрасной. Мне нравится, что cron-задачи разделены по версиям, легко просматриваются в моём редакторе, и, кроме всего прочего, написаны на чистом английском. %% $schedule->call('SomeClass@method')->dailyAt('10:00'); %% == Новое поведение %%dd()%% == Серьёзно обновилась всеми любимая функция %%dd()%%, или %%(t)dump and die%% (!!(tl_note) вывод дампа переменной и завершение выполнения скрипта - //прим. пер.//!!). Symfony выпустила компонент VarDumper, и теперь он в арсенале Laravel. //Компонент VarDumper обеспечивает механизмы для доступа к любой произвольной переменной в PHP. С их помощью он предоставляет вам возможность использовать функцию %%dump()%%, которая лучше %%var_dump%%.// Это функция очень полезна и даёт нам намного больше возможностей. Более подробную информацию вы найдёте в статье ((https://laravel-news.com/2014/12/laravel-5-dd-gets-upgrade/ Laravel dd обновилась)). == Изменение атрибутов Eloquent == Этим нововведением мы обязаны ((http://daylerees.com/ Дэйли Ризу)). ((док5:eloquent#attribute-casting Изменение атрибутов)) позволяет конвертировать атрибуты в другой тип данных. Например, вы добавляете свойство %%(t)casts%% в вашу модель: %% protected $casts = [ 'is_admin' => 'boolean', 'options' => 'array', ]; %% Это автоматически изменит тип %%(t)is_admin%% на %%(t)boolean%%. А %%(t)options%% будут храниться в виде json и будут автоматически конвертированы в массив при выводе. Это восхитительно, когда вы используете JavaScript, и вам необходимо совпадение типов. == Whoops больше не нужен == В Laravel 4 был обработчик ошибок Whoops. Он удалён из Laravel 5, но если он вам нужен, прочтите ((http://mattstauffer.co/blog/bringing-whoops-back-to-laravel-5 Как вернуть Whoops в Laravel 5)). == Пакеты и Workbench == В системе работы с пакетами в Laravel произошло несколько значительных изменений. Наиболее заметное из них - отказ от Workbench в пользу использования пакетов Composer напрямую. Вы можете узнать больше об этих изменениях из ((док5:packages официальной документации)) или из руководства от Джона инт Хаута ((http://woodmarks.nl/laravel-5-loading-package-views-language-files/ Загрузка представлений пакета/языковых файлов)). == Psysh == {{Image /packages/proger/habravel/uploads/210-laravel-5-Psysh-300x171.png}} Tinker - инструмент с интерфейсом командной строки для манипуляций над вашим кодом - теперь использует ((http://psysh.org/ Psysh)) от Джастина Хальмана. Для тех, кто не знает, Psysh - это: //Консоль разработчика в режиме исполнения, интерактивный отладчик и REPL (Read-eval-print loop) — простая интерактивная среда программирования — для PHP.// Psysh супер мощный, вот его некоторые возможности: * Чтение документации по контексту. %%(sh)doc dd%%. * Команда %%(sh)list%% знает всё про ваш код, и любой другой. Легко выводит и ищет все переменные, константы, классы, интерфейсы, типажи, функции, методы и свойства. * Легко показывает исходный код любого пользовательского объекта, класса, интерфейса, типажа, константы, метода или свойства. * Ловит последнее исключение и предоставляет его по команде %%(sh)wtf%%. * Отображает, ищет, сохраняет и воспроизводит историю вашей командной оболочки. Уверен, он умеет намного больше и станет отличным инструментом в вашем арсенале. == SuperClosure == Ещё одно новшество - ((GIT:../jeremeamia/super_closure SuperClosure)) - библиотека для сериализации замыканий и анонимных функций от Джереми Линблума. В фреймворке она используется для ((док5:queues#queueing-closures замыканий очередей)). == Новые генераторы == Artisan теперь ещё мощнее и может генерировать множество шаблонного кода для вас. Вот список некоторых доступных на данный момент: * make:command — создаёт новый класс команды * make:console — создаёт новую команду Artisan * make:controller — создаёт новый класс контроллера ресурса * make:event — создаёт новый класс события * make:middleware — создаёт новый класс промежуточного ПО * make:migration — создаёт новый файл миграции * make:model — создаёт новый класс модели Eloquent * make:provider — создаёт новый класс поставщика услуг * make:request — создаёт новый класс запроса формы * event:generate — генерирует пропущенные события и обработчики == Обновление == С помощью простой команды %%(sh)composer update%% обновиться не получится. Так как это основная версия, приготовьтесь потратить несколько часов на обновление. Уже написано два руководства по этому процессу. ((http://laravel.com/docs/master/upgrade Официальная документация)) и ((http://mattstauffer.co/blog/upgrading-from-laravel-4-to-laravel-5 Руководство по обновлению от Мэтта)). == Куда идти дальше? == Как и в любом фреймворке, лучшее место для изучения - официальная документация. После этого подпишитесь на ((https://laravel-news.com/newsletter/ Новостную рассылку Laravel)), которая будет держать вас в курсе последних ((https://laravel-news.com/category/laravel-tips-tutorials/ советов и руководств по Laravel)), ((https://laravel-news.com/category/laravel-packages/ пакетов Laravel)) и всего остального, связанного с Laravel. 2015 год обещает быть захватывающим для мира Laravel, и мне уже не терпится держать вас в курсе событий!