Контроллеры хранятся в папке app/controllers/. Этот путь, в свою очередь определен в файле composer.json в настройке classmap.
Все контроллеры должны наследовать класс BaseController. Этот класс также может хранится в папке app/controllers, и в него можно поместить общую логику для других контроллеров.BaseController расширяет базовый класс Controller.
Создаем контроллер
Создание контроллера с помощью artisan-команды. |
php artisan make:controller StaticController |
Есть несколько способов определения маршрута для контроллера.
В файле app/routes.php.
Определение маршрута для контроллера с помощью методаget. |
Route::get('static', 'StaticController@index'); |
Вот так будет выглядеть сам контроллер:
Простейший контроллер StaticController. |
namespace App\Http\Controllers; class StaticController extends BaseController { public function getIndex() { echo 'Ok'; } } |
Обратите внимание на namespace (пространство имен) в начале файла.
Теперь, если в адресной строке браузера набираем cabinet, получаем ответсервера Ok
Создание RESTfull-контроллера через artisan
Сперва в консоли перейдем в папку с файлом artisan. Находясь в этой папке, выполним следующую консольную команду.
Можно также создавать RESTfull-контроллеры:
Создание RESTfull-контроллеров. |
php artisan make:controller NewsController --resource |
Получим такой контроллер:
RESTfull-контроллер. |
class NewsController extends \BaseController { public function index() { // } public function create() { // } public function store() { // } public function show($id) { // } public function edit($id) { // } public function update($id) { // } public function destroy($id) { // } } |
Также необходимо зарегистрировать роут к этому контроллеру.
Регистрация роута в файле app/routes.php. |
Route::resource('news', 'NewsController'); |
Такая регитрация дает множество маршрутов для обработки RESTfull экшнов контроллера News. Сам сгенерированный контроллер уже имеет методы-заглушки для каждого из этих маршрутов с комментариями, которые напоминают вам о том, какие типы запросов они обрабатывают.
Тип |
Путь |
Действие |
Имя маршрута |
GET |
/resource |
index |
resource.index |
GET |
/resource/create |
create |
resource.create |
POST |
/resource |
store |
resource.store |
GET |
/resource/{id} |
show |
resource.show |
GET |
/resource/{id}/edit |
edit |
resource.edit |
PUT/PATCH |
/resource/{id} |
update |
resource.update |
DELETE |
/resource/{id} |
destroy |
resource.destroy |
Где resource – имя контроллера.
Чтобы создать только часть из возможных экшнов, можно воспользоваться настройками –only или --except :
Ключевые слова only и except можно указать при регистрации маршрута:
Создание маршрутов для группы экшнов. |
Route::resource('news', 'PhotoController', array('only' => array('index', 'show'))); // либо: Route::resource('news', 'PhotoController', array('except' => array('create', 'store', 'update', 'delete'))); |
Вложенная папка для контроллеров
Нужно ли создавать вложенную папку для контроллеров - каждый программист решает для себя сам. Здесь мы рассмотрим как это сделать. Сперва просто создаем папки, где будут находиться контроллеры.
app/controllers
app/controllers/auth
app/controllers/adminka
...
В самих контроллерах ничего не меняем. Из корневой папки проекта открываем консоль и выполняем следующую команду composer:
Перестройка автозагрузки контроллеров. |
composer dump-autoload |
Практика