sers{{SingleLaracast Introducing Lumen, 14.04.2015, 5.06.2016, https://laracasts.com/lessons/introducing-lumen}} (0:00) Привет, с вами Тейлор Отуэлл с ещё одним скринкастом по Laravel. В этом скринкасте я бы хотел познакомить вас с Lumen, новейшим членом семейства Laravel. Lumen – это официальный микро-фреймворк Laravel, и он молниеносно быстрый. Это отличный путь для написания микро-сервисов или небольших API, используя любимый вами синтакс Laravel, но в очень быстром фреймворке. (0:30) Очень часто, когда у вас было основное приложение Laravel, но вы хотели поддержать его с микро-сервисами или другими вспомогательными сервисами, то вам приходилось брать Silex или Slim и пользоваться другим синтаксисом, а не уже привычными библиотеками. И иногда, как вы знаете, это требует приличного объёма дополнительных усилий для настройки вашей БД, кэша и всего прочего. С Lumen у вас появится вся мощь удобных компонентов Laravel, так что Eloquent, БД, кэширование (даже Redis-кэширование) – всё это доступно вам по умолчанию и при этом всё равно будет быстрее чем все другие варианты. (1:00) Так что это отличный выбор для поддержки ваших приложений Laravel. Позвольте я вам покажу как он выглядит. У меня тут установленный по умолчанию Lumen и вы можете увидеть что структура папок тут потоньше. Нет директорий %%(t)resources%% и %%(t)database%% по умолчанию. Но есть знакомый %%(t)App/Http/routes.php%%. И вы увидите, что мы используем замыкания, хотя в Lumen вы можете пользоваться контроллерами с полным внедрением зависимости, следовательно эта мощь вам также доступна если захотите. (1:30) И конечно можно создавать посредников (middleware) для защиты ваших маршрутов и некоторой фильтрации до того как запрос попадает в ваше приложение. ОК, процесс создания маршрута в Lumen такой же, как и создания маршрута в Laravel. Мы можем просто вернуть тут %%(t)Hello World%%, вот здесь. И вызовем это в нашем браузере. И получим: "Hello World". И конечно всё это очень быстро. И что ещё круто... давайте запросим немного данных у БД и я покажу вам как просто это сделать в Lumen. (2:00) Хорошо, итак, если я перейду в мой файл окружения – именно здесь я сконфигурирую приложение Lumen. Здесь нет директории %%(t)config%% с 7-8 файлами, а есть лишь один конфигурационный файл и вы можете использовать библиотеку dotenv, которую использует Laravel, или можете загрузить свои переменные окружения через nginx или ещё каким-то образом с вашего производственного сервера. Хорошо, как видите, у меня уже есть БД сконфигурированная для Homestead. Давайте создадим таблицу. И что тут в Lumen ещё здорово – с ним идут некоторые команды Artisan. (2:30) Давайте я вам это покажу: %%(sh) cd Laravel/lumen %% Хорошо, теперь если я сделаю: %%(sh) php artisan list %% вы увидите, что у меня есть некоторые команды миграции, очереди, т.е. Lumen включает также очень лёгкий обработчик очередей, и даже может добавлять новые задачи в очередь самостоятельно, как и полноценный Laravel. Так как очереди – это большая часть современных веб-приложений, то для Lumen есть смысл уметь и ставить в очередь и использовать сообщения из очереди от себя. Хорошо, давайте продолжим и создадим миграцию, чтобы для начала просто создать элементарную таблицу. (3:00) И сперва нам нужно создать папку для этой БД, потому что по умолчанию её там нет. Я делаю это так: %%(sh) php artisan make database %% Хорошо, и вы увидите созданную папку БД с директориями %%(t)migrations%% и %%(t)seeds%%. То есть мы можем также и делать seed (начальную загрузку) для нашей БД. ОК, я вернусь в свой терминал, и теперь мы готовы создать миграцию, так что давайте создадим таблицу %%(t)users%% и дадим ей такое имя: %%(sh) php artisan make:migration create_users_table --create=users %% (3:30) Хорошо, эта миграция создана. Теперь что нам нужно сделать – это добавить её к настройкам автозагрузки. Так что добавим %%(t)classmap%% и просто напишем тут %%(t)database/%%: %% "classmap": [ "database/" ] %% Хорошо, теперь нам нужно заново создать файлы автозагрузки: %%(sh) co %% ОК, теперь мы готовы к созданию этой миграции. Давайте перейдём внутрь файла и добавим здесь пару полей. (4:00) Например e-mail адрес, и конечно наши временные штампы. Для этого демо – это всё, что нам нужно: %% $table->string('email')->unique(); %% Хорошо, мы почти готовы к запуску этой миграции. Последнее что осталось сделать – раскомментировать несколько строк в нашем файле %%(t)bootstrap/app.php%%. Если я открою его, мне нужно раскомментировать вот эту вызов %%Dotenv::load()%%. Она на самом деле загружает наши переменные окружения в само окружение. И конечно на вашем производственном сервере вы можете делать это как угодно, через nginx или любые другие способы загрузки переменных через окружения. Также, мне нужно раскомментировать вот это: %% $app->withFacades(); %% (4:30) Это позволит нашей миграции использовать этот фасад %%Schema%% для создания нашей таблицы. Хорошо, убрав комментарии с этих двух строк, моя миграция должна быть готова к запуску. Вернёмся в терминал. Мне нужно быть в моей виртуальной машине, так как моя БД живёт там в Homestead, и я готов к запуску: %%(sh) php artisan migrate --force %% (мы форсируем запуск) Хорошо, наша таблица %%(t)users%% была создана, и это здорово! Отлично, теперь давайте используем Eloquent чтобы наполнить БД какими-то данными. (5:00) Итак, первое что мне требуется сделать, это именно включить Eloquent, так как по умолчанию он не активирован. Я могу сделать это снова в моём файле %%(t)bootstrap/app.php%% – нужно лишь раскомментировать эту строку: %% $app->withEloquent(); %% И это подгрузит Eloquent при загрузке моего приложения. Хорошо, теперь перейдём в мой файл с маршрутами, и прямо здесь создадим простую модель для этого демо. Создадим модель %%User%% и она унаследует %%Illuminate\Database\Eloquent\Model%%: %% class User extends Model { } %% Хорошо, и нам не нужно задавать имя таблицы, поскольку Eloquent сам за нас это решит. (5:30) Теперь давайте создадим нового пользователя и зададим адрес почты как %%(t)taylor@laravel.com%%, сохраним этого пользователя и вернём %%(t)All Done!%%. Итак: %% $user = new User; $user->email = 'taylor@laravel.com'; $user->save(); return 'All Done!'; %% И теперь давайте вызовем этот маршрут и посмотрим, создан ли наш пользователь. %%(t) lumen.app:8000 %% Хорошо, и мы получили: "All Done!", так что давайте проверим БД. Если я обновлю это, вы увидите – у нас тут есть таблица %%(t)users%% и вон он наш пользователь в БД. (6:00) Итак, мы уже используем мощь Eloquent с Lumen. Пойдём дальше и вернём данные Eloquent из этого маршрута. Хорошо, мы смотрим на нашу БД – есть пользователь с ID = 1, так давайте сделаем ещё один маршрут с ID пользователя %%(t)user/{id}%%, так чтобы мы тут могли принимать параметр. Мы сделаем: %% $app->get('user/{id}', function ($id) { return User::FindOrFail($id); }); %% (6:30) Очень простой маршрут, который берёт пользователя из БД и выдаёт его обратно на страницу. Вызовем этот маршрут: %%(t) lumen.app:8000/user/1 %% Хорошо, пользователь 1, и как вы видите, как и в Laravel, мы легко получили JSON пользователя. Нет ничего проще, если вы хотите начать строить API с Lumen и Eloquent, и вы можете даже с лёгкостью добавить сюда кэширование. ОК, давайте вызовем пользователя, которого нет в БД: %%(t) lumen.app:8000/user/10 %% Как видите, мы должны получить исключение 404, и вот оно – отчёт с ошибкой в стиле Symfony, когда что-то в Lumen идёт не так. (7:00) С помощью этого вы легко разберётесь с тем, что произошло в вашем приложении. Вот насколько просто начать создавать на Lumen и Eloquent, и конечно мы можем использовать кэширование и даже очереди задач с мощью этого микро-фреймворка с поразительной скоростью работы.