PHP: Laravel
Теория: Ресурсная маршрутизация
Фактически, любой CRUD состоит из 7 маршрутов, контроллера и шаблонов. Причем большая часть этого кода идентична, особенно маршруты. Они не содержат логики и всегда строятся по одному и тому же принципу.
Laravel частично заимствовал из Rails еще один механизм, который называется "ресурсная маршрутизация". Он упрощает создание типичных CRUD, за счет полной унификации всех маршрутов и способов их обработки. Вместо описания 7 разных маршрутов, ресурсная маршрутизация позволяет указать один метамаршрут:
Внутри себя он превращается в те самые семь маршрутов, которые мы реализовывали в предыдущих уроках. Их можно увидеть с помощью команды artisan:
Довольно неплохо. В проектах где подобных CRUD много (любой типичный веб-проект), ресурсный маршрутизатор очень помогает. Он не просто сокращает количество кода, но и дает хорошую унификацию. Нужно меньше думать и меньше спорить. Все уже спроектировано.
Следующий шаг – упрощение контроллера. Во-первых, можно сразу сгенерировать контроллер, со всеми нужными обработчиками. Во-вторых, этот контроллер можно интегрировать с нужной моделью:
На выходе получим такой контроллер:
Обратите внимание на параметры обработчиков. Laravel самостоятельно находит нужную сущность и достает ее из базы данных. Это позволяет хоть немного, но сократить код.
Ресурсы могут быть вложенными. Это дает возможность строить пути, отражающие зависимости между сущностями на сайте:
Принцип построения адресов точно такой же, как и для обычного ресурса, но с включением указания на родительский ресурс:
Вложенный ресурс можно генерировать автоматически:
Например, вот так выглядит ресурс комментарии к статьям:
Для вложенного ресурса, в экшены, кроме самой сущности передается и родительская сущность:
Если ресурс называется articles.comments, то параметр следует назвать $comment, а не $articleComment. Другими словами, имя параметра выбирается в единственном числе по имени ресурса.
Немного по-другому начинает работать хелпер route. Для построения ссылок, там где участвуют оба ресурса, нужно использовать массив для их передачи:
Заключение
Ресурсная маршрутизация – удобный механизм, позволяющий немного упростить создание CRUD. Он берет на себя много работы и дает программисту возможность сосредоточиться на логике.
Существует негласное правило, насколько вложенной может быть вложенная маршрутизация. Считается, что не стоит делать более одного вложения. Иначе ссылки получаются очень длинными, а код начинает усложняться, так как приходится оперировать сразу тремя сущностями и более.
.png)


