От автора: в термине MVC-фреймворк «C» обозначает Контроллер. Он регулирует потоки между Моделью и Представлением.
Создание контроллера
Чтобы создать в Laravel контроллеры с помощью Artisan CLI (интерфейса командной строки), откройте командную строку или терминал на базе операционной системы, которую вы используете, и введите следующую команду:
1 |
php artisan make:controller <controller-name> --plain |
Замените имя <controller-name> на имя вашего контроллера. Таким образом, будет создан простой конструктор, так как мы передаем аргумент — plain. Если вы не хотите создавать простой конструктор, вы можете не указывать аргумент. Созданный конструктор будет размещен в папке app/Http/Controllers. В него уже будет добавлен базовый код, к которому вы можете добавить собственный код. Созданный контроллер можно вызвать из файла route.php с помощью следующего синтаксиса.
Синтаксис
1 |
Route::get(‘base URI’,’controller@method’); |
Шаг 1 — Выполните следующую команду для создания контроллера UserController.
1 |
php artisan make:controller UserController --plain |
Шаг 2 – В результате вы получите следующее.
Шаг 3 Созданный контроллер, уже содержащий базовый код, будет размещаться в файле app/Http/Controller/UserController.php, в зависимости от ваших потребностей вы можете добавить в него собственный код.
1 2 3 4 5 6 7 8 9 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // } |
Middleware контроллера
Ранее мы рассматривали Middleware, его также можно использовать с контроллером. Middleware может быть назначено для маршрута контроллера или внутри конструктора контроллера. Вы можете использовать метод Middleware для назначения Middleware контроллеру. Применение зарегистрированного Middleware может быть ограничено конкретным методом контроллера. Назначение Middleware для маршрутизации
1 2 3 4 |
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]); |
В этом коде мы назначаем Middleware auth в контроллере UserController для маршрута profile.
Назначение Middleware в конструкторе Контроллера
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct(){ $this->middleware('auth'); } } |
Здесь мы назначаем Middleware auth, используя метод Middleware в конструкторе UserController.
Пример
Шаг 1 — Добавьте следующий код в файл app/Http/routes.php и сохраните его. routes.php
1 2 3 4 5 |
<?php Route::get('/usercontroller/path',[ 'middleware' => 'First', 'uses' => 'UserController@showPath' ]); |
Шаг 2 — Создайте FirstMiddleware, выполнив следующий код.
1 |
php artisan make:middleware FirstMiddleware |
Шаг 3 — Добавьте следующий код в метод обработчика созданного FirstMiddleware в папке app/Http/Middleware. FirstMiddleware.php
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo '<br>First Middleware'; return $next($request); } } |
Шаг 4 — Создайте SecondMiddleware, выполнив следующий код.
1 |
php artisan make:middleware SecondMiddleware |
Шаг 5 — Добавьте следующий код в метод обработчика созданного SecondMiddleware в папке app/Http/Middleware. SecondMiddleware.php
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next){ echo '<br>Second Middleware'; return $next($request); } } |
Шаг 6 — Создайте контроллер с именем UserController, выполнив следующую команду.
1 |
php artisan make:controller UserController --plain |
Шаг 7 — После успешного выполнения URL-адреса вы получите следующий результат:
Шаг 8 — Скопируйте следующий код в файл app/Http/UserController.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { public function __construct(){ $this->middleware('Second'); } public function showPath(Request $request){ $uri = $request->path(); echo '<br>URI: '.$uri; $url = $request->url(); echo '<br>'; echo 'URL: '.$url; $method = $request->method(); echo '<br>'; echo 'Method: '.$method; } } |
Шаг 9. Теперь запустите внутренний сервер php, выполнив следующую команду, если вы еще не выполнили ее.
1 |
php artisan serve |
Шаг 10 – Перейдите по следующему URL-адресу. //localhost:8000/usercontroller/path
Шаг 11 – Вы должны увидеть на экране следующее:
Управляемые контроллеры ресурсов
Часто при создании приложения нам необходимо выполнить CRUD-операции (Create, Read, Update, Delete). Laravel позволяет сделать это намного проще. Просто создайте контроллер, и Laravel автоматически предоставит все методы для CRUD-операций. Вы также можете зарегистрировать один маршрут для всех методов в файле routes.php.
Пример
Шаг 1. Создайте контроллер под именем MyController, выполнив следующую команду.
1 |
php artisan make:controller MyController |
Шаг 2 — Добавьте следующий код в файл app/Http/Controllers/MyController.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class MyController extends Controller { public function index(){ echo 'index'; } public function create(){ echo 'create'; } public function store(Request $request){ echo 'store'; } public function show($id){ echo 'show'; } public function edit($id){ echo 'edit'; } public function update(Request $request, $id){ echo 'update'; } public function destroy($id){ echo 'destroy'; } } |
Шаг 3 — Добавьте следующую строку кода в файл app/Http/routes.php.
1 |
Route::resource('my','MyController'); |
Шаг 4 — Теперь мы регистрируем все методы MyController, регистрируя контроллер с ресурсом. Ниже приведена таблица действий, выполняемых контроллером ресурсов.
Шаг 5 — Попробуйте выполнить URL-адреса, приведенные в следующей таблице.
Универсальные контроллеры
Универсальный контроллер позволяет определять один маршрут для обработки каждого действия в контроллере. Вы можете определить его в файле route.php с помощью метода Route:controller, как показано в приведенном ниже коде.
1 |
Route::controller('base URI','<class-name-of-the-controller>'); |
Замените <class-name-of-the-controller> на имя класса, которое вы указали для вашего контроллера. Имя метода контроллера должно начинаться с HTTP-метода, например get или post. Если вначале указано get, будет запущен get запрос, а если вначале указано post, будет обработан post запрос. После HTTP-метода вы можете указать любое имя для метода, но оно должно идти после URI.
Шаг 1 — Выполните для создания контроллера приведенную ниже команду. Мы помещаем имя класса в контроллер ImplicitController. Вы можете указать для класса любое имя по своему выбору.
1 |
php artisan make:controller ImplicitController --plain |
Шаг 2 – В результате вы получите следующее:
Шаг 3 — Скопируйте следующий код в файл app/Http/Controllers/ImplicitController.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { /** * ответ на GET запрос к /test */ public function getIndex(){ echo 'index method'; } /** * ответ на GET запрос к /test/show/1 */ public function getShow($id){ echo 'show method'; } /** * ответ на GET запрос к /test/admin-profile */ public function getAdminProfile(){ echo 'admin profile method'; } /** * ответ на POST запрос к /test/profile */ public function postProfile(){ echo 'profile method'; } } |
Шаг 4 — Добавьте следующую строку в файл app/Http/routes.php для маршрутизации запросов к указанному контроллеру.
1 |
Route::controller('test','ImplicitController'); |
Встраивание конструктора
Контейнер служб Laravel используется для работы со всеми контроллерами Laravel. В результате вы можете вводить любые зависимости, которые нужны в конструкторе для контроллера. Зависимости будут автоматически обработаны и введены в экземпляр контроллера.
Шаг 1 — Добавьте следующий код в файл app/Http/routes.php.
1 2 3 4 |
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index'); |
Шаг 2 — Добавьте следующий код в файл app/Http/Controllers/ImplicitController.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { private $myclass; public function __construct(\MyClass $myclass){ $this->myclass = $myclass; } public function index(){ dd($this->myclass); } } |
Шаг 3. Перейдите по следующему URL-адресу, чтобы проверить встроенный конструктор. //localhost:8000/myclass
Шаг 4 – Вы должны увидеть следующее:
Встраивание метода
Кроме встраивания конструктора вы также можете вводить зависимости для рабочих методов вашего контроллера.
Шаг 1 — Добавьте следующий код в файл app/Http/routes.php.
1 2 3 4 |
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index'); |
Шаг 2 — Добавьте следующий код в файл app/Http/Controllers/ImplicitController.php.
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { public function index(\MyClass $myclass){ dd($myclass); } } |
Шаг 3. Перейдите по следующему URL-адресу, чтобы проверить встроенный конструктор. //localhost:8000/myclass
В результате вы получите следующее:
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.