Ещё в сентябре Тейлор Отвелл объявил, что Laravel 4.3 будет переименован в Laravel 5, чтобы отразить изменения каталогов и «другие интересные новшества». После этого не прекращается волнение вокруг Laravel 5, а «другие интересные новшества» превратились в почти два десятка новых функций, которые помогут разработчикам быть более продуктивными.
Некоторые не спешат обновляться и терпеливо ожидают в стороне. Другие уже несколько месяцев назад погрузились с головой в разрабатываемую ветку, тщательно просматривая коммиты в поисках критических изменений.
Но скоро всё это закончится, потому что Laravel только что объявил, что на следующей неделе официально выйдет Laravel 5.
#L5. На следующей неделе.
@laravelphp
Эти три слова вызвали большое волнение, и не зря. Месяцы затраченного времени и усердной работы вложены в эту версию, и она, наконец, готова к выходу.
Laravel 5 — значительное обновление с большим количеством новых фишек, но в то же время в нём сохраняется то, что сделало Laravel невероятно успешным.
На самом деле новых возможностей так много, что всех их трудно отследить. В этой статье я опишу новые возможности и то, на что вам стоит обратить внимание на следующей неделе.
Структура каталогов Laravel 5
Первое существенное изменение — структура каталогов. Папка приложения внешне преобразилась, и некоторые вещи были вынесены за пределы приложения. В том числе настройки, база данных, хранилище и ресурсы.
То, что находится внутри приложения, теперь разбито на следующие папки:
- Commands (Команды)
- Console (Консоль)
- Events (События)
- Exceptions (Исключения)
- Handlers (Обработчики)
- Http
- Providers (Поставщики услуг)
- Services (Услуги)
Если вы привыкли к предыдущим версиям Laravel, то это может застать вас врасплох. Но уверяю вас, примерно через два дня использования всё станет ясным и простым. Для получения дополнительной информации прочитайте эту статью Мэтта Штоффера.
Изменения Blade
В Blade сделано не так много изменений, но одно из них довольно существенно.
В Laravel 4 Blade включал два следующих стиля: PHP{{
и PHP{{{
. Двойные фигурные скобки служили для вывода сырой информации, а тройные — для экранирования.
Теперь и двойные и тройные фигурные скобки экранируют переменную, а для сырого вывода служит новый стиль {!! $var !!}.
Типичный пример использования сырого вывода — вспомогательные методы формы:
{!! Form::open() !!}
Контракты
Контракты — это набор интерфейсов, которые определяют базовые услуги, предоставляемые фреймворком. Поэтому они могут служить в качестве документации по функциям фреймворка. Тем не менее, они гораздо более полезны, и вы можете прочесть официальную документацию для получения дополнительной информации о них и о том, как они могут помочь.
Команды и события
Команды и события были переделаны. Эти функции подробно описаны как в документации, так и в следующих материалах:
Фасады и вспомогательные методы
Фасады по-прежнему есть в Laravel 5, но новые вспомогательные функции начинают замещать некоторые из наиболее распространённых элементов. Например, в Laravel 4 для отрисовки представления использовался такой код:
View::make('path.to.view');
Теперь это простой вызов функции:
view('path.to.view');
PHPabort()
PHPaction()
PHPapp()
PHPapp_path()
PHPasset()
- маршрутизация –
PHPget()
,PHPdelete()
,PHPput()
PHPback()
PHPredirect()
PHPresponse()
- и многие другие…
Маршруты
В маршрутах две новые функции. Кэширование маршрутов и промежуточное ПО.
Мэтт проделал отличную работу, описав обе эти функции так, что мне просто нечего добавить. Прочитайте его статьи, чтобы разобраться в этом глубже.
Внедрение метода контроллера
Laravel 4 поддерживал внедрение конструктора контроллера. Разработчики пошли дальше, и теперь вы можете использовать любые зависимости на основе подсказок типов в ваших методах:
public function store(Request $request)
public function taxes(TaxCalculator $tax)
Вот ссылки для более глубокого изучения:
- Официальная документация
- Мэтт Штоффер
Скаффолдинг авторизации
Процесс авторизации по умолчанию предварительно настроен и готов к использованию. Вникнуть во всё это теперь легче, чем когда-либо.
Появилось два новых типажа (trait):
- AuthenticatesAndRegistersUsers
- ResetsPasswords
Прелесть в том, что вы можете использовать имеющиеся или переопределить любые методы типажей, чтобы настроить их под своё приложение.
Socialite
Socialite — необязательный пакет Laravel 5.0, который упрощает работу с OAuth. Все мы его ненавидим, правда? В данный момент Socialite поддерживает работу с Facebook, Twitter, Google и GitHub.
В официальной документации более подробная информация о реализации и принципе работы пакета.
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-пакет PHP dotenv, который автомагически загружает переменные среды из .env в PHPgetenv()
, PHP$_ENV
и PHP$_SERVER
.
Этот пакет встроен в Laravel 5, чтобы значительно упростить управление средами. Больше не надо редактировать bootstrap/start.php и настраивать массив $app->detectEnvironment().
Вместо этого вы создаёте собственный файл .env, и легко можете настраивать его под свои нужды. А затем в любом файле настроек вы можете использовать что-то подобное:
'database' => env('DB_DATABASE’, 'myproddb'),
Вы также можете создать дополнительные файлы для различных сред, например для тестирования. Кстати у Laracasts уже есть пример интеграции behat, в котором это уже используется.
Запросы формы
О проверке ввода и запросах формы уже много сказано. Это такая область, о которой, я уверен, вы уже наслышаны.
В целом авторизация и проверка ввода могут быть превращены в FormRequests и легко внедрены.
Взгляните на следующие материалы, чтобы узнать больше об этой возможности:
Laravel Elixir
Elixir — это новая обёртка для gulp, упрощающая работу с активами. Вместо того, чтобы стараться создать собственную систему для создания css и js-файлов, вы можете использовать Elixir и легко запускать ваше приложение.
Прямо из коробки Elixir обрабатывает 90% всего, что вам необходимо: sass, less, coffeescript, JavaScript, версионность файлов и многое другое.
Laravel Scheduler
Laravel Scheduler (планировщик) создан для упрощения задач, которые необходимо запускать через CRON. Надо только настроить одно cron-задание, которое вызывает shartisan schedule:run
, и запланировать его выполнение на каждую минуту.
После настройки cron вы можете планировать запуск любых задач в краткой и дружелюбной форме. Это устраняет неприятную необходимость запоминания планирования в cron, и это действительно очень просто. Эти планирования созданы в вашей папке app/Console/Commands.
$schedule->command('cache:clear')
->hourly()
->sendOutputTo($filePath)
->emailOutputTo('john@doe.com');
Анонс этой функции был встречен множеством смешанных реакций. Я из тех, кто считает её прекрасной. Мне нравится, что cron-задачи разделены по версиям, легко просматриваются в моём редакторе, и, кроме всего прочего, написаны на чистом английском.
$schedule->call('SomeClass@method')->dailyAt('10:00');
Новое поведение PHPdd()
Серьёзно обновилась всеми любимая функция PHPdd()
, или dump and die (вывод дампа переменной и завершение выполнения скрипта — прим. пер.). Symfony выпустила компонент VarDumper, и теперь он в арсенале Laravel.
Компонент VarDumper обеспечивает механизмы для доступа к любой произвольной переменной в PHP. С их помощью он предоставляет вам возможность использовать функцию PHPdump()
, которая лучше PHPvar_dump
.
Это функция очень полезна и даёт нам намного больше возможностей. Более подробную информацию вы найдёте в статье Laravel dd обновилась.
Изменение атрибутов Eloquent
Этим нововведением мы обязаны Дэйли Ризу. Изменение атрибутов позволяет конвертировать атрибуты в другой тип данных. Например, вы добавляете свойство casts в вашу модель:
protected $casts = [
'is_admin' => 'boolean',
'options' => 'array',
];
Это автоматически изменит тип is_admin на boolean. А options будут храниться в виде json и будут автоматически конвертированы в массив при выводе.
Это восхитительно, когда вы используете JavaScript, и вам необходимо совпадение типов.
Whoops больше не нужен
В Laravel 4 был обработчик ошибок Whoops. Он удалён из Laravel 5, но если он вам нужен, прочтите Как вернуть Whoops в Laravel 5.
Пакеты и Workbench
В системе работы с пакетами в Laravel произошло несколько значительных изменений. Наиболее заметное из них — отказ от Workbench в пользу использования пакетов Composer напрямую.
Вы можете узнать больше об этих изменениях из официальной документации или из руководства от Джона инт Хаута Загрузка представлений пакета/языковых файлов.
Psysh
Tinker — инструмент с интерфейсом командной строки для манипуляций над вашим кодом — теперь использует Psysh от Джастина Хальмана. Для тех, кто не знает, Psysh — это:
Консоль разработчика в режиме исполнения, интерактивный отладчик и REPL (Read-eval-print loop) — простая интерактивная среда программирования — для PHP.
Psysh супер мощный, вот его некоторые возможности:
- Чтение документации по контексту.
shdoc dd
. - Команда
shlist
знает всё про ваш код, и любой другой. Легко выводит и ищет все переменные, константы, классы, интерфейсы, типажи, функции, методы и свойства. - Легко показывает исходный код любого пользовательского объекта, класса, интерфейса, типажа, константы, метода или свойства.
- Ловит последнее исключение и предоставляет его по команде
shwtf
. - Отображает, ищет, сохраняет и воспроизводит историю вашей командной оболочки.
Уверен, он умеет намного больше и станет отличным инструментом в вашем арсенале.
SuperClosure
Ещё одно новшество — SuperClosure — библиотека для сериализации замыканий и анонимных функций от Джереми Линблума. В фреймворке она используется для замыканий очередей.
Новые генераторы
Artisan теперь ещё мощнее и может генерировать множество шаблонного кода для вас. Вот список некоторых доступных на данный момент:
- make:command — создаёт новый класс команды
- make:console — создаёт новую команду Artisan
- make:controller — создаёт новый класс контроллера ресурса
- make:event — создаёт новый класс события
- make:middleware — создаёт новый класс промежуточного ПО
- make:migration — создаёт новый файл миграции
- make:model — создаёт новый класс модели Eloquent
- make:provider — создаёт новый класс поставщика услуг
- make:request — создаёт новый класс запроса формы
- event:generate — генерирует пропущенные события и обработчики
Обновление
С помощью простой команды shcomposer update
обновиться не получится. Так как это основная версия, приготовьтесь потратить несколько часов на обновление. Уже написано два руководства по этому процессу. Официальная документация и Руководство по обновлению от Мэтта.
Куда идти дальше?
Как и в любом фреймворке, лучшее место для изучения — официальная документация. После этого подпишитесь на Новостную рассылку Laravel, которая будет держать вас в курсе последних советов и руководств по Laravel, пакетов Laravel и всего остального, связанного с Laravel.
2015 год обещает быть захватывающим для мира Laravel, и мне уже не терпится держать вас в курсе событий!
Комментарии (2)
Ожидаем сегодня :)
Только начал разбираться с 4 версией а тут уже 5) Блин пробую и laravel и yii оба хорошие что-то в одном лучше, что-то в другом не могу определиться что выбрать) Спасибо за перевод