7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Laravel

25 советов и хитростей в Laravel

Scroll to top
Read Time: 13 mins

Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)

Не так уж давно был такой период, когда PHP и его сообщество мягко говоря недолюбливали. И почти что каждый день главной шуткой было сказать то, насколько PHP ужасен. Давайте посмотрим, какие новые, высмеивающие PHP, статьи в блогах постят сегодня?

Да, к сожалению сообщество и экосистема языка просто не были на том же уровне, что и другие современные языки.

Да, к сожалению сообщество и экосистема языка просто не были на том же уровне, что и другие современные языки. Казалось, что PHP было суждено жить своей отдельной жизнью в виде грязной WordPress темы.

Но затем довольно удивительно как вещи стали меняться, да к тому же очень быстро. Прямо как при перемешивания горшка ведьмы, один за другим из неоткуда стали появляться инновационные новые проекты. Наверно самым значимым из таких проектов стал Composer: менеджер зависимостей для PHP (не такой как Bundler для Ruby и NPM для Node). Если раньше в прошлом PHP разработчикам приходилось использовать PEAR, то теперь благодаря Composer, мы можем просто изменить JSON файл, и мгновенно получить необходимые зависимости. Вот профайлер, вот фреймворк... все готово за считанные секунды!

В переполненном мире PHP фреймворков, в тот момент когда CodeIgniter начал выдыхаться, Тейлор Отвел создает Laravel, который становится любимцем сообщества. Laravel своим простым и элегантным синтаксисом сделал процесс создания приложений на PHP очень простым и интересным! А в четвертой версии фреймворка, наконец при использовании Composer, в сообществе все встало на свои места.


Нужны миграции (контроль версий для вашей базы данных)? Готово. А как на счет мощной реализации Active-Record? Определенно с этим успешно справится Eloquent. Как на счет возможностей тестирования? Конечно же. А маршрутизация? Пожалуйста. А что же на счет трестируемой HTTP прослойки? Благодаря Сomposer Laravel может использовать большое число замечательных компонентов Symfony. Если вам что-то нужно, то вероятнее всего это уже есть в Laravel.


В то время как PHP уже практически стал никому не интересен - вдруг благодаря Laravel и Composer будущее становится уже более радостным. И так отбросим лишнее и заглянем поглубже внутрь фреймворка, посмотрим, что он может нам предложить.


1. Запросы Eloquent

Laravel предлагает одну из самых мощных реализаций Active-Record в PHP мире. Допустим у вас есть таблица orders вместе с моделью Eloquent Order:

Мы можем легко выполнить любое количество запросов к базе данных, используя простой и элегантный PHP. Нет необходимости иметь дело с грязным SQL. Давайте выберем все заказы.

Готово. Или возможно эти заказы следует вернуть отсортированные по дате. Это просто:

А что если вместо получения записи нам нужно сохранить новый заказ в базе. Конечно же, мы можем сделать это.

Готово! С помощью Laravel задачи, которые раньше казались громоздкими теперь становятся до смешного простыми.


2. Гибкая маршрутизация

Laravel является уникальным в том, что ее можно совершенно по-разному использовать. Предпочитаете простую похожую на Sinatra систему маршрутизации? Конечно, Laravel может довольно легко это предоставить, используя замыкания.

Такой подход может быть удобен для маленьких проектов, но скорее всего в большинстве ваших проектов вы будете использовать контроллеры. И нормально, Laravel и это умеет!

Готово. Замечаете как Laravel ростет вместе с вашими потребностями? Такое свойство приспособляться к нуждам разработчиков и делает этот фреймворк таким популярным.


3. Легкие связи

Что мы делаем, когда нам нужно определить связи? Например, задача скорее всего будет принадлежать юзеру. Как это представить в Laravel? Если мы представим, что необходимые таблицы в базе уже присутствуют, то нам останется только настроить соответствующие модели Eloquent.

И готово! Давайте попробуем получить все задачи пользователя с id 1. Мы можем сделать это в две строчки кода.

Однако поскольку мы определили отношения в оба конца, если мы вместо этого хотим, получить пользователя, связанного с задачей, то мы тоже сможем легко это сделать.


4. Привязка модели к форме

Часто может оказаться полезным привязать форму к модели. Очевидным примером этого является, когда вы хотите изменить некоторые записи в базе данных. С помощью привязки модели к форме, мы можем мгновенно заполнить поля формы значениями из соответствующей записи в таблице.

Так как форма теперь привязана к определенному экземпляру Order, то поля ввода будут отображать корректные данные из таблицы. Просто!


5. Кэширование запросов к базе данных

Слишком много запросов к базе, и очень быстро ваше приложение станет медленным как улитка. К счастью Laravel предлагает простой механизм для кеширования этих запросов, используя для этого лишь один вызов метода.

Давайте получим все questions из базы данных, но закешируем запрос, так как врятли эта таблица будет часто обновляться.

Вот и все! Теперь весь следующий час этот запрос будет оставаться закешированным и мы не будем дергать базу.


6. Компоновщики View

Вы обязательно встретите ситуацию, когда в нескольких разных отображениях нужно получить доступ к одним и тем же данным. Хорошим примером этого является панель навигации, которая отображает список тегов.

Чтобы контроллеры содержали как можно меньше кода, Laravel предлагает компоновщиков отображений для управления подобного рода вещами.

С помощью этого кода теперь в любое время, когда будет загружен файл layouts/nav.blade.php, то мы получим доступ к переменной $tags с определенным значением.


7. Простая Аутентификация

Laravel предоставляет максимально простой подход к аутентификации. Просто берем массив с учетными данными, которые обычно были получены через форму логина, и передаем их в Auth::attempt(). Если переданные значения соответствуют данным, которые содержаться в таблице users, то пользователь будет залогинен.

А что если нам нужно разлогинить пользователя, когда например будет открыт URL /logout? Это так же очень просто.


8. Ресурсы

Работать по принципу REST в Laravel очень просто. Чтобы зарегистрировать контроллер с ресурсами, нужно просто вызвать Route::resource() следующим образом:

С помощью этого кода Laravel зарегистрирует 8 маршрутов.

  • GET /orders
  • GET /orders/:order
  • GET /orders/create
  • GET /orders/:order/edit
  • POST /orders
  • PUT /orders/:order
  • PATCH /orders/:order
  • DELETE /orders/:order

Затем соответствующий контроллер можно будет сгенерировать следующей командой из командной строки:

В этом новом сгенерированном контроллере каждый метод будет соответствовать каждому маршруту, которые мы сделали выше. Например маршрут /orders будет соответствовать методу index, /orders/create - методу create и т.д.

Теперь у нас есть мощные возможности, которые позволяют с легкостью создавать RESTful приложения и API.


9. Шаблонизатор Blade

Хотя конечно же PHP по своей природе сам является языком шаблонов, но он особо не изменился, чтобы стать действительно хорошим в этом отношении. Но и это нормально, так как Laravel предлагает собственный шаблонизатор Blade, чтобы заполнить этот пробел. Просто именуем свои файлы с расширением .blade.php и они автоматически будут распарсены шаблонизатором. Теперь мы можем делать подобные вещи:


10. Возможности для тестирования

Так как Laravel использует Composer, то у нас сразу же из коробки есть поддержка фреймворка для тестирования PHPUnit. Устанавливаем фреймворк и просто выполняет phpunit из командной строки.

И даже более того, Laravel предоставляет набор хелперов для тестирования самых общих ситуаций в функциональных тестах.

Давайте проверим, что домашняя страница возвращает 200 код ответа.

Или же нам нужно удостовериться, что когда отправляется форма контактов, то пользователя редиректит назад на домашнюю страницу с соответствующим всплывающим сообщением.


11. Компонент Remote

Начиная с Laravel 4.1 есть возможность легко написать Artisan команду для доступа к серверу по SSH, и выполнить там любые команды. Все это легко осуществимо с помощью SSH фасада:

Просто передаем массив команд в метод run(), а Laravel уже сам все сделает! Теперь, остается только выполнить Artisan команду, запускаем php artisan command:make DeployCommand, и вставляем нужный код в метод команды fire для быстрого создания команды деплоя.


12. События

Laravel предлагает элегантную реализацию шаблона наблюдатель, который вы можете использовать в своих приложениях. Можно прослушивать собственные события фреймворка, такие как illuminate.query, или даже вызывать и отлавливать свои собственные.

Правильное использование событий в приложении будет иметь огромный эффект на его структуру и возможность его последующей поддержки.

Как и большинство вещей в Laravel, если вы предпочитаете использовать имя класса вместо замыкания, то без проблем можно использовать его. Laravel просто получит его из IoC контейнера.


13. Просмотр всех маршрутов


По мере роста приложения, простор всех зарегистрированных маршрутов может оказаться весьма трудным занятием. Это особенно справедливо, когда вы не очень бережно относитесь к своему routes.php файлу.

Laravel предлагает удобную команду routes, которая покажет все зарегистрированным маршруты вместе с соответствующими им методами контроллеров.


14. Очереди

Рассмотри процесс регистрации пользователя в нашем приложении. Скорее всего здесь будет задействовано некоторе количество событий. Нужно будет обновить данные в базе данных, добавить нового пользователя в список рассылок, должен открыться новый счет для клиента, отправлено пригласительное письмо и так далее. К сожалению такие действия обычно могут занять продолжительное время.

Зачем заставлять пользователя ждать, пока все это выполниться? Вместо это мы можем выполнить эти действия в фоне.

Наверно самой интересной частью является то, что Laravel прекрасно поддерживает очереди iron.io. Это означает, что мы можем использовать всю мощь очередей даже не имея никакого опыта работы с "worker" или "daemon". Просто регистрируем URL для точки входа используя удобную команду php artisan queue:subscribe и iron.io будет пинговать этот URL, каждый раз когда в очередь будет добавлена новая задача.


Простые шаги для быстрой производительности!


15. Простая валидация

Laravel приходит нам на помощь так же когда требуется валидация. Мы можем использовать класс Validator с интуитивно понятным интерфейсом. Просто передаем объект, который требуется валидировать и список правил в метод make, об остальном позаботится Laravel.

Обычно такой код следует располагать в модели, чтобы вызвать валидацию можно было одним методом:


16. Тинкер Тинкер


Особенно в первые моменты изучения Laravel, может оказаться весьма полезным возможность повозиться с его ядром и возможностями. Artisan команда tinker поможет нам в этом.

Начиная с версии 4.1 команда tinker стала еще более мощной, теперь она использует популярный компонент Boris.


17. Миграции

Миграции следует рассматривать как систему контроля версий вашей базы данных. В любой момент можно откатить все миграции назад, перезапустить их и даже более. Возможно настоящая мощь кроется в возможности выкатывания приложения на продакшн, и выполнения всего лишь одной команды php artisan migrate чтобы обновить схему базы данных.

Чтобы подготовить схему для новой таблицы users, просто выполняем:

Эта команда создаст новый файл с миграцией, который вы затем сможете заполнить в соответствии с вашими потребностями. Как только закончите, выполняем команду php artisan migrate и таблица будет создана. Готово! Нужно откатить назад создание? Легко! php artisan migrate:rollback.

Вот пример схемы для таблицы с часто задаваемыми вопросами.

Обратите внимание, что метод drop() является инверсией метода up(). Вот что легко нам позволяет откатить миграции. Это же гораздо проще чем иметь дело с кучей SQL запросов?


18. Генераторы

Хотя Laravel и предлагает несколько удобных генераторов, но невероятно полезным оказался пакет "Laravel 4 Generators". Можно генерировать ресурсы, файлы сидов, промежуточные таблицы, а также миграции.

В предыдущем разделе нам нужно было самим писать схему. Однако в помощью пакета генераторов вместо этого мы можем сделать так:

Об остальном позаботится генератор. Получается, что с помощью всего двух команд вы можете подготовить и создать новую таблицу в базе данных.

Пакет Laravel 4 Generators может быть установлен через Composer.


19. Команды

Как было подмечено ранее, есть несколько сценариев, когда может понадобиться написать свои собственные команды. Они могут использоваться для генерации файлов, развертывания приложений и прочего.

Так как это довольно распространенная задача, то Laravel максимально упрощает процесс создания собственных команд.

Эта команда создаст весь необходимый код, готовый для написания своей собственной команды. Затем в новой созданной команде app/commands/MyCustomCommand.php заполняем имя команды и ее описание:

И наконец в методе fire() выполняем любые действия, которые нам нужны. Как только будет готово, останется только зарегистрировать новую команду в Artisan, в файле app/start/Artisan.php.

Верите или нет, но это все! Теперь можно вызывать вашу собственную команду из терминала.


20. Моки Фасадов

Laravel обильно использует шаблон проектирования фасад. Это позволяет получить чистый синтаксис в стиле статичных вызовов, который вы несомненно полюбите (Route::get(), Config::get() и т.д.), который по-прежнему предоставляет за кулисами все возможности для тестирования.

Так как эти классы для фасадов достаются из IoC контейнера, мы можем легко подменить из экземпляры моками для тестирования. Это позволяет делать следующие вещи:

Да, мы вызываем shouldReceive прямо у фасада. Но за кулисами Laravel использует замечательный фреймворк для тестирования Mockery. Это означает, что мы можем свободно использовать фасады в нашем коде, и он по-прежнему остается на 100% тестируемым.


21. Помощники форм

Поскольку создание формы часто может оказаться весьма трудоемкой задачей, построитель форм в Laravel может облегчить этот процесс. Вот несколько наглядных примеров:

Как на счет таких задач, как запоминание введеных данных с последней отправки формы? Laravel делает это автоматически!


22. IoC контейнер

В ядре Laravel находится его мощный IoC контейнер, который помогает в управлении зависимостями классов. Отметим также, что контейнер может автоматически создавать экземпляры классов без какой-либо конфигурации!

Просто указываем типы зависимостей в конструкторе и во время создания объекта, Laravel использует PHP Reflection API чтобы прочитать эти зависимости и попытаться из вставить для нас.

Когда вы запрашиваете класс из IoC контейнера, то разрешение всех его зависимостей происходит автоматически.

Важно отметить, что контроллеры всегда достаются из IoC контейнера. Поэтому можно указать тип зависимостей для вашего контроллера и Laravel сделает все возможное, чтобы встроить их для вас.


23. Окружения

В то время как для маленьких проектов вполне сгодится и одно окружения, для приложений более серьезных размеров потребуется уже несколько разных окружений. Development, testing, production... все они являются необходимыми и требует свою отдельную конфигурацию.

Возможно ваше тестовое окружение использует для тестирования базу данных, которая находится в памяти. А окружение для разработки использует другие ключи API. Скорее всего ваше боевое окружение использует другую строку соединения с базой.

К счастью Laravel упрощает для нас и эту задачу. Взглянем на файл bootstrap/start.php в нашем приложении.

Это базовая демонстрация установки как local так и production окружений на основе адресной строки в браузере.

Хотя это и работает, но честно говоря, предпочтительнее использовать для таких вещей переменные окружения. Не беспокойтесь; Это все тоже выполнимо в Laravel! Вместо этого просто возвращаем функцию из метода detectEnvironment в объекте контейнера.

Теперь если не была установлена переменная окружения (что вы должны будете делать для production), окружение по умолчанию local.


24. Простая конфигурация

И снова Laravel делает подход к конфигурированию приложения максимально простым. Создаем папку внутри app/config, которая совпадает с требуемым окружением, и любые файлы конфигурации внутри ее будут использованы, если используется соответствующее окружение. Таким образом чтобы, скажем, установить различные API ключи биллинга для разработки, можно сделать так:

Конфигурация переключится автоматически. Просто пишем Config::get('billing.api_key') и Laravel корректно определит какой файл нужно будет прочитать.


25. Последующее изучение

Когда дело доходит до образования, Laravel сообщество, несмотря на свой сравнительно молодой возраст, является очень доброжелательным. В чуть более чем за год было выпущено полдюжины различных книг - по всем вопросам разработки Laravel.

Можно выучить все, начиная от основ, и тестирования и заканчивая поддержкой больших приложений!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.