Для чего нужны контроллеры laravel

Laravel 8 · Контроллеры

Введение

Написание контроллеров

Основные понятия о контроллерах

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

Контроллеры одиночного действия

Если действие контроллера является особенно сложным, вам может показаться удобным посвятить целый класс контроллера этому единственному действию. Для этого вы можете определить один метод __invoke в контроллере:

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

Посредник контроллера

Посредник может быть назначен маршрутам контроллера в ваших файлах маршрутизации:

Или вам может быть удобно указать посредника в конструкторе вашего контроллера. Используя метод middleware в конструкторе вашего контроллера, вы можете назначить посредника действиям контроллера:

Контроллеры также позволяют регистрировать посредника с помощью замыкания. Это обеспечивает удобный способ определения встроенного посредника для одного контроллера без определения целого класса посредника:

Ресурсные контроллеры

Эта команда поместит новый класс контроллера в каталог app/Http/Controllers вашего приложения. Контроллер будет содержать метод для каждого из доступных действий с ресурсами. Затем, вы можете зарегистрировать маршрут ресурса, который указывает на контроллер:

Это единое определение маршрута создаст несколько маршрутов для обработки множества действий с ресурсом. Сгенерированный контроллер уже будет иметь заготовки для каждого из этих действий. Помните, вы всегда можете получить быстрый обзор маршрутов своего приложения, выполнив команду route:list Artisan.

Вы даже можете зарегистрировать сразу несколько контроллеров ресурсов, передав массив методу resources :

Действия, выполняемые ресурсными контроллерами

МетодURIДействиеИмя маршрута
GET/photosindexphotos.index
GET/photos/createcreatephotos.create
POST/photosstorephotos.store
GET/photos/

showphotos.show
GET/photos//editeditphotos.edit
PUT/PATCH/photos/

updatephotos.update
DELETE/photos/

destroyphotos.destroy

Настройка поведения при отсутствии модели

Обычно, если неявно связанная модель ресурса не найдена, то генерируется 404 HTTP-ответ. Однако вы можете изменить это поведение, вызвав метод missing при определении вашего ресурсного маршрута. Метод missing принимает замыкание, которое будет вызываться, если неявно связанная модель не может быть найдена для любого из маршрутов ресурса:

Указание модели ресурса

Частичные ресурсные маршруты

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

Ресурсные API-маршруты

Вы можете зарегистрировать сразу несколько ресурсных API-контроллеров, передав массив методу apiResources :

Вложенные ресурсы

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

Этот маршрут зарегистрирует вложенный ресурс, к которому можно получить доступ с помощью URI, подобных следующим:

Ограничение вложенных ресурсов

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

Упрощенное вложение

Часто нет необходимости иметь в URI и родительский, и дочерний идентификаторы, поскольку дочерний идентификатор уже является уникальным идентификатором. При использовании уникальных идентификаторов, таких как автоинкрементные первичные ключи, для идентификации ваших моделей в сегментах URI, вы можете использовать «упрощенное вложение»:

Это объявление маршрута будет определять следующие маршруты:

МетодURIДействиеИмя маршрута
GET/photos//commentsindexphotos.comments.index
GET/photos//comments/createcreatephotos.comments.create
POST/photos//commentsstorephotos.comments.store
GET/comments/

showcomments.show
GET/comments//editeditcomments.edit
PUT/PATCH/comments/

updatecomments.update
DELETE/comments/

destroycomments.destroy

Именование ресурсных маршрутов

По умолчанию все действия ресурсного контроллера имеют имя маршрута; однако, вы можете переопределить эти имена, передав массив имен с желаемыми именами маршрутов:

Именование параметров ресурсных маршрутов

В приведенном выше примере создается следующий URI для маршрута show ресурса:

Ограничение ресурсных маршрутов

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

Этот маршрут зарегистрирует ограниченный вложенный ресурс, к которому можно получить доступ с помощью таких URI, как следующий:

Локализация URI ресурсов

Дополнение ресурсных контроллеров

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

Внедрение зависимостей и контроллеры

Внедрение зависимостей в конструкторе контроллера

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

Внедрение зависимостей в методах контроллера

Помимо внедрения в конструкторе, вы также можете объявить тип зависимости в методах вашего контроллера. Распространенный вариант использования внедрения в методе – это внедрение экземпляра Illuminate\Http\Request в методы вашего контроллера:

Если ваш метод контроллера также ожидает входные данные из параметра маршрута, укажите аргументы маршрута после других зависимостей. Например, если ваш маршрут определен так:

Источник

Laravel Framework Russian Community

Пролог

Начало работы

Основы архитектуры

Основы

Фронтенд

Безопасность

Копаем глубже

База данных

Eloquent ORM

Тестирование

Официальные пакеты

Контроллеры

Введение

Простейшие контроллеры

Определение контроллеров

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

Контроллеры и пространства имён

Важно помнить, что при определении роута контроллера нам не надо указывать полное пространство имён контроллера. Так как RouteServiceProvider загружает файлы вашего роута в группу роута, которая содержит пространство имён, мы указали только ту часть имени класса, которая следует за частью App\Http\Controllers пространства имён.

Контроллеры одного действия

Для определения контроллера, обрабатывающего всего одно действие, поместите в контроллер единственный метод __invoke :

При регистрации роутов для контроллеров одного действия вам не надо указывать метод:

Посредник контроллера

Посредников можно назначить роутам контроллера в файлах роутов:

Но удобнее указать посредника в конструкторе вашего контроллера. Используя метод middleware в конструкторе контроллера, вы легко можете назначить посредника для действия контроллера. Вы можете даже ограничить использование посредника, назначив его только для определённых методов класса контроллера:

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

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

Контроллеры ресурсов

Маршрутизация ресурсов Laravel назначает обычные CRUD-роуты на контроллеры одной строчкой кода. Например, вы можете создать контроллер, обрабатывающий все HTTP-запросы к фотографиям, хранимым вашим приложением. Вы можете быстро создать такой контроллер с помощью Artisan-команды make:controller :

Теперь мы можем зарегистрировать роут контроллера ресурса:

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

Действия, обрабатываемые контроллером ресурсов

ОперацияURIДействиеНазвание роута
GET/photosindexphotos.index
GET/photos/createcreatephotos.create
POST/photosstorephotos.store
GET/photos/

showphotos.show
GET/photos//editeditphotos.edit
PUT/PATCH/photos/

updatephotos.update
DELETE/photos/

destroyphotos.destroy

Указание модели ресурса

Подмена методов формы

Частичные роуты ресурсов

При объявлении роута вы можете указать подмножество всех возможных действий, которые должен обрабатывать контроллер вместо полного набора стандартных действий:

Именование роутов ресурса

По умолчанию все действия контроллера ресурсов имеют имена роутов, но вы можете переопределить эти имена, передав массив names вместе с остальными параметрами:

Именование параметров роута ресурса

По умолчанию Route::resource создаст параметры для ваших роутов ресурсов на основе имени ресурса в единственном числе. Это легко можно изменить для каждого ресурса, передав parameters в массив опций. Массив parameters должен быть ассоциативным массивом имён ресурсов и имён параметров:

Этот пример генерирует следующие URI для роута ресурса show :

Локализация URI ресурсов

Добавление дополнительных роутов в контроллеры ресурсов

Если вам надо добавить дополнительные роуты в контроллер ресурсов, не входящие в набор роутов ресурсов по умолчанию, их надо определить до вызова Route::resource ; в ином случае, определенные методом resource роуты могут нечаянно превзойти по важности ваши дополнительные роуты:

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

Внедрение зависимостей и контроллеры

Внедрение в конструктор

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

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

Внедрение в метод

Кроме внедрения в конструктор, вы также можете указывать типы зависимостей в методах вашего контроллера. Распространённый пример внедрения в метод — внедрение экземпляра Illuminate\Http\Request в один из методов контроллера:

Если метод вашего контроллера также ожидает данные из параметра роута, просто перечислите аргументы роута после остальных зависимостей. Например, если ваш роут определён так:

Кэширование роутов

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

Если ваше приложение единолично использует роуты контроллера, то вы можете воспользоваться преимуществом кэширования роутов в Laravel. Использование кэша роутов радикально уменьшит время, требуемое для регистрации всех роутов вашего приложения. В некоторых случаях регистрация ваших роутов может стать быстрее в 100 раз. Для создания кэша роутов просто выполните Artisan-команду route:cache :

После выполнения этой команды ваши кэшированные роуты будут загружаться при каждом запросе. Помните, после добавления новых роутов, вам необходимо заново сгенерировать свежий кэш роутов. Поэтому нужно выполнить команду route:cache уже при развёртывании вашего проекта.

Для очистки кэша роутов используйте команду route:clear :

Источник

Контроллеры

Основы

Контроллеры — это классы, принимающие пользовательский ввод и взаимодействующие с моделями, библиотеками и видами (представлениями, «views» ). В общем случае они запрашивают у модели данные и передают его виду, который формирует страницу, передаваемую клиенту.

Использование контроллеров — обычная практика в современных вёб-приложениях, однако Laravel также позволяет разработчику реализовать собственную логику используя маршруты ( «routes» ). Новичкам следует начать с использования контроллеров, хотя в них нет ничего, что нельзя было бы реализовать с помощью маршрутов.

Простейший контроллер

Действия ( «actions» ) — это методы контроллера, которые должны быть доступны при запросе из сети. Методы действий начинаются с action_ ; все прочие методы класса-контроллера будут не доступны из сети.

PHP Base_Controller расширяет фундаментальный класс PHP Controller — вы можете поместить в него свои методы, используемые многими вашими контроллерами и наследовать их классы от него.

Маршрутизация

Важно понимать, что в Laravel все маршруты ( «routes» ) должны быть явно зарегистрированы — даже те, что обрабатываются контроллерами.

Это значит, что методы контроллера, которые не были зарегистрированы не доступны запросам из сети. Однако есть возможность автоматически зарегистрировать все действия контроллера — обычно это делается в application/routes.php (см. «Маршрутизация» ).

Контроллеры в пакетах

Создание контроллеров, принадлежащих пакету, почти не отличается от создания обычных контроллеров для вашего вёб-приложения (в application/controllers) — для начала начните имя класса-контроллеров с имени пакета. Например, для пакета «admin» класс-контроллер «home» может выглядеть так:

Как зарегистрировать пакетный контроллер? Просто:

А если для этого контроллера была задана опция handles в application/routes.php (например, admin ) — то адрес доступа будет выглядеть так:

Двойное двоеточие ( :: ) используется в различных функциях Laravel для задания имени пакета.

Фильтры для действий

Фильтры — это метод, вызываемые до или после вызова определённого действия контроллера ( «controller action» ). В Laravel, вы можете не только привязывать фильтры к действиям, но и определять, для какого из метода запроса HTTP (GET, POST, PUT или DELETE) этот фильтр будет вызван.

Вы можете привязать фильтр «до» (before) или «после» (after) из конструктора класса-контроллера — например, так можно привязать фильтр ко всем его действиям:

В этом примере фильтр auth будет вызван перед (before) вызовом любого действия, принадлежащего этому контроллеру. Действие auth — стандартное для Laravel и умолчательный обработчик для него уже задан в application/routes.php — если клиент не вошёл в систему, он переадресует его на форму авторизации.

Привязка к действиям

Привязка ко всем, кроме.

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

Привязка к POST-запросу

Фильтр csrf включен в состав Laravel и по умолчанию определён в application/routes.php.

Вложенные контроллеры

Контроллеры могут быть расположены в любой папке любой вложенности внутри application/controllers.

Например, для определения подконтроллера «panel» контроллера «admin» поместите код его класса в controllers/admin/panel.php:

Теперь зарегистрируйте вложенный контроллер в списке маршрутов используя синтаксис с точками:

Внимание: регистрируя вложенные контроллеры всегда начинайте с самых вложенных, чтобы маршруты внешних контроллеров не перекрывали вложенные.

Теперь этот контроллер доступен по этому адресу:

REST-контроллеры

REST (передача состояния представления, Representational State Transfer) — способ передачи информации о предыдущих действиях клиента в рамках его сессии. Сюда относятся, например, поля заполненной на предыдущей странице формы.

Задание REST-действий:

Это особенно удобно при создании CRUD-методов — вы можете отделить код, заполняющий и выводящий форму от кода проверки и сохранения её данных.

Внедрение зависимостей

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

Перед внедрением зависимостей ознакомьтесь со статьёй об IoC-контейнере.

Фабрика контроллеров

Если вам нужно ещё больше контроля за созданием экземпляров класса-контроллера, например, при использовании стороннего IoC-контейнера, то обратитесь к фабрике контроллеров.

Регистрация события, создающего экземпляр контроллера:

Событие PHP Controller :: factory принимает имя контроллера, который должен быть создан. Всё, что вам нужно — вернуть экземпляр его класса.

Статистика: Символов — 8 352/7 154 без пробелов (6 296/5 414 без кода):, слов — 883

Источник

Laravel Framework Russian Community

Введение

Простейшие контроллеры

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

Привязка метода контроллера к маршруту выглядит так:

Теперь при совпадении запроса со строкой ‘user/‘ будет вызван метод showProfile класса UserController. В метод будет передан параметр .

Контроллеры и пространства имён

Именованные роуты с контроллерами

Как и в случае с обработчиками-замыканиями, вы можете присвоить имя этому роуту:

Использование посредников с контроллерами

Посредники могут быть привязаны к маршрутам следующим образом:

Но более удобно назначать посредника в конструкторе контроллера. Используя метод middleware в конструкторе, вы можете легко назначать посредника для контроллера. Вы даже можете использовать посредника только для определенных методов контроллера:

RESTful ресурс-контроллеры

Для создания контроллера выполните следующую консольную команду:

Команда создаст файл контроллера app/Http/Controllers/PhotoController.php. Контроллер будет содержать методы для всех доступных действий с ресурсами.

Далее вы можете создать маршрут-ресурс для этого контроллера:

Действия, обрабатываемые ресурс-контроллером:

ГлаголпутьДействиеИмя маршрута
GET/photoindexphoto.index
GET/photo/createcreatephoto.create
POST/photostorephoto.store
GET/photo/

showphoto.show
GET/photo//editeditphoto.edit
PUT/PATCH/photo/

updatephoto.update
DELETE/photo/

destroyphoto.destroy

Ограничение набора действий для ресурса

При задании ресурс-роута вы можете определить только часть из всех возможных действий:

Naming Resource Routes

По умолчанию, все действия ресурс контроллеров имеют имя в формате «ресурс.действие». Однако, вы можете изменить эти имена, используя массив names в опциях:

Задание имен для действий с ресурсом

Пример выше задает следующий URIs для действия show :

При настройке параметров ресурса важно помнить приоритет назначения имен:

Расширение набора действий с ресурсом

Если необходимо определить дополнительные маршруты для ресурс-контроллера помимио маршрутов по умолчанию, вы должны определять их перед вызовом Route::resource ; иначе, маршруты, определенные через метод resource могут иметь приоритет над вашими дополнительными маршрутами:

Внедрение зависимостей в контроллерах

Внедрение зависимостей в конструкторе

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

Конечно, вы можете использовать в качестве зависимости любой контракт Laravel contract. Если контейнер может его разрешить, вы можете его использовать в контроле типов.

Внедрение зависимостей в методах контроллеров

Точно так же можно указывать зависимости для любого метода контролера. Например, давайте укажем Illuminate\Http\Request как зависимость для метода store :

Если метод контроллера так же ожидает какие-либо данные из маршрута, то можно просто указать их после других зависимостей. Например, если маршрут задан так:

Кэширование маршрутов

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

Если ваше приложении использует маршруты исключительно на основе контроллеров, вы должны получить примущество кеширования. Использование кэширования значительно уменьшает время для регистрации всех маршрутов приложения. В некоторых случаях получается 100-кратное ускорение регистрации. Для создания кэша маршрутов нужно только выполнить в консоли Artisan команду route:cache :and:

Для удаления кэша маршрутов без генерации нового используется Artisan-команда route:clear :

Источник

Laravel Framework Russian Community

Пролог

Начало работы

Основы архитектуры

Основы

Фронтенд

Безопасность

Копаем глубже

База данных

Eloquent ORM

Тестирование

Официальные пакеты

Контроллеры

Введение

Простейшие контроллеры

Определение контроллеров

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

Контроллеры и пространства имён

Важно помнить, что при определении роута контроллера нам не надо указывать полное пространство имён контроллера. Так как RouteServiceProvider загружает файлы вашего роута в группу роута, которая содержит пространство имён, мы указали только ту часть имени класса, которая следует за частью App\Http\Controllers пространства имён.

Контроллеры одного действия

Для определения контроллера, обрабатывающего всего одно действие, поместите в контроллер единственный метод __invoke :

При регистрации роутов для контроллеров одного действия вам не надо указывать метод:

Посредник контроллера

Посредников можно назначить роутам контроллера в файлах роутов:

Но удобнее указать посредника в конструкторе вашего контроллера. Используя метод middleware в конструкторе контроллера, вы легко можете назначить посредника для действия контроллера. Вы можете даже ограничить использование посредника, назначив его только для определённых методов класса контроллера:

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

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

Контроллеры ресурсов

Маршрутизация ресурсов Laravel назначает обычные CRUD-роуты на контроллеры одной строчкой кода. Например, вы можете создать контроллер, обрабатывающий все HTTP-запросы к фотографиям, хранимым вашим приложением. Вы можете быстро создать такой контроллер с помощью artisan-команды make:controller :

Теперь мы можем зарегистрировать роут контроллера ресурса:

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

Вы можете зарегистрировать сразу несколько контроллеров ресурсов, передав массив:

Действия, обрабатываемые контроллером ресурсов

ОперацияURIДействиеНазвание роута
GET/photosindexphotos.index
GET/photos/createcreatephotos.create
POST/photosstorephotos.store
GET/photos/

showphotos.show
GET/photos//editeditphotos.edit
PUT/PATCH/photos/

updatephotos.update
DELETE/photos/

destroyphotos.destroy

Указание модели ресурса

Подмена методов формы

Частичные роуты ресурсов

При объявлении роута вы можете указать подмножество всех возможных действий, которые должен обрабатывать контроллер вместо полного набора стандартных действий:

Роуты для API-ресурсов

Вы можете зарегистрировать сразу несколько API-контроллеров ресурсов, передав массив:

Вложенные ресурсы

Иногда может понадобиться определить роуты к вложенному ресурсу. Например, фоторесурс может иметь несколько комментариев, которые могут быть прикреплены к фотографии. Для вложенных контроллеров ресурсов используйте dot-нотацию в декларации роута.

Этот маршрут зарегистрирует вложенный ресурс, к которому можно получить доступ с помощью такого URI:

Неглубокое вложение

Часто не обязательно иметь и родительский, и дочерний идентификатор в URI, так как дочерний идентификатор уже является уникальным идентификатором. При использовании уникального идентификатора, такого как первичные ключи для идентификации ваших моделей в сегментах URI, вы можете использовать «неглубокое вложение»:

Данная конструкция зарегистрирует следующие роуты:

VerbURIActionRoute Name
GET/photos//commentsindexphotos.comments.index
GET/photos//comments/createcreatephotos.comments.create
POST/photos//commentsstorephotos.comments.store
GET/comments/

showcomments.show
GET/comments//editeditcomments.edit
PUT/PATCH/comments/

updatecomments.update
DELETE/comments/

destroycomments.destroy

Именование роутов ресурса

По умолчанию все действия контроллера ресурсов имеют имена роутов, но вы можете переопределить эти имена, передав массив names вместе с остальными параметрами:

Именование параметров роута ресурса

Этот пример генерирует следующие URI для роута ресурса show :

Локализация URI ресурсов

Добавление дополнительных роутов в контроллеры ресурсов

Если вам надо добавить дополнительные роуты в контроллер ресурсов, не входящие в набор роутов ресурсов по умолчанию, их надо определить до вызова Route::resource ; в ином случае, определенные методом resource роуты могут нечаянно превзойти по важности ваши дополнительные роуты:

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

Внедрение зависимостей и контроллеры

Внедрение в конструктор

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

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

Внедрение в метод

Кроме внедрения в конструктор, вы также можете указывать типы зависимостей в методах вашего контроллера. Распространённый пример внедрения в метод — внедрение экземпляра Illuminate\Http\Request в один из методов контроллера:

Если метод вашего контроллера также ожидает данные из параметра роута, перечислите аргументы роута после остальных зависимостей. Например, если ваш роут определён так:

Кэширование роутов

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

Если ваше приложение единолично использует роуты контроллера, то вы можете воспользоваться преимуществом кэширования роутов в Laravel. Использование кэша роутов радикально уменьшит время, требуемое для регистрации всех роутов вашего приложения. В некоторых случаях регистрация ваших роутов может стать быстрее в 100 раз. Для создания кэша роутов просто выполните Artisan-команду route:cache :

После выполнения этой команды ваши кэшированные роуты будут загружаться при каждом запросе. Помните, после добавления новых роутов, вам необходимо заново сгенерировать свежий кэш роутов. Поэтому нужно выполнить команду route:cache уже при развёртывании вашего проекта.

Для очистки кэша роутов используйте команду route:clear :

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *