В рамках MVC буква «C» обозначает контроллер. Он действует как трафик между представлениями и моделями. В этой главе вы узнаете о контроллерах в Laravel.
Создание контроллера
Откройте командную строку или терминал в зависимости от используемой операционной системы и введите следующую команду, чтобы создать контроллер с помощью Artisan CLI (интерфейс командной строки).
php artisan make:controller <controller-name> --plain
Замените <имя-контроллера> на имя вашего контроллера. Это создаст простой конструктор при передаче аргумента — обычный . Если вы не хотите создавать простой конструктор, вы можете просто проигнорировать аргумент. Созданный конструктор можно увидеть в app / Http / Controllers .
Вы увидите, что базовое кодирование для вас уже сделано, и вы можете добавить свой собственный код. Созданный контроллер может быть вызван из rout.php по следующему синтаксису.
Синтаксис
Route::get(‘base URI’,’controller@method’);
пример
Шаг 1 — Выполните следующую команду, чтобы создать UserController .
php artisan make:controller UserController --plain
Шаг 2 — После успешного выполнения вы получите следующий вывод.
Шаг 3 — Вы можете увидеть созданный контроллер в app / Http / Controller / UserController.php с некоторой базовой кодировкой, уже написанной для вас, и вы можете добавить свою собственную кодировку в зависимости от ваших потребностей.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // }
Промежуточное ПО контроллера
Мы уже видели промежуточное программное обеспечение, и его можно использовать и с контроллером. Промежуточное программное обеспечение также может быть назначено на маршрут контроллера или в конструкторе вашего контроллера. Вы можете использовать метод промежуточного программного обеспечения для назначения промежуточного программного обеспечения контроллеру. Зарегистрированное промежуточное программное обеспечение также может быть ограничено определенным методом контроллера.
Назначение промежуточного программного обеспечения для маршрута
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]);
Здесь мы назначаем промежуточное ПО авторизации для UserController в профиле маршрута.
Назначение промежуточного программного обеспечения в конструкторе контроллера
<?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'); } }
Здесь мы назначаем промежуточное ПО аутентификации, используя метод промежуточного ПО в конструкторе UserController .
пример
Шаг 1 — Добавьте следующие строки кода в файл app / Http / rout.php и сохраните его.
routes.php
<?php Route::get('/usercontroller/path',[ 'middleware' => 'First', 'uses' => 'UserController@showPath' ]);
Шаг 2 — Создайте промежуточное программное обеспечение под названием FirstMiddleware , выполнив следующую строку кода.
php artisan make:middleware FirstMiddleware
Шаг 3 — Добавьте следующий код в метод handle недавно созданного FirstMiddleware в app / Http / Middleware .
FirstMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo '<br>First Middleware'; return $next($request); } }
Шаг 4 — Создайте промежуточное программное обеспечение под названием SecondMiddleware , выполнив следующую команду.
php artisan make:middleware SecondMiddleware
Шаг 5 — Добавьте следующий код в метод handle недавно созданного SecondMiddleware в app / Http / Middleware .
SecondMiddleware.php
<?php namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next) { echo '<br>Second Middleware'; return $next($request); } }
Шаг 6 — Создайте контроллер с именем UserController , выполнив следующую строку.
php artisan make:controller UserController --plain
Шаг 7. После успешного выполнения URL вы получите следующий вывод:
Шаг 8 — Скопируйте следующий код в файл app / Http / UserController.php .
приложение / Http / UserController.php
<?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, выполнив следующую команду, если вы еще не выполнили ее.
php artisan serve
Шаг 10 — Посетите следующий URL.
http://localhost:8000/usercontroller/path
Шаг 11 — Вывод будет выглядеть, как показано на следующем рисунке.
Restful Resource Controllers
Часто при создании приложения нам необходимо выполнять операции CRUD (создание, чтение, обновление, удаление) . Laravel облегчает нам эту работу. Просто создайте контроллер, и Laravel автоматически предоставит все методы для операций CRUD. Вы также можете зарегистрировать единый маршрут для всех методов в файле rout.php.
пример
Шаг 1 — Создайте контроллер MyController , выполнив следующую команду.
php artisan make:controller MyController
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / MyController.php .
приложение / Http / Контроллеры / MyController.php
<?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 / rout.php .
приложение / Http / routes.php
Route::resource('my','MyController');
Шаг 4 — Теперь мы регистрируем все методы MyController, регистрируя контроллер с ресурсом. Ниже приведена таблица действий, выполняемых контроллером ресурсов.
глагол | Дорожка | действие | Название маршрута |
---|---|---|---|
ПОЛУЧИТЬ | / мой | индекс | my.index |
ПОЛУЧИТЬ | / Мой / создать | Создайте | my.create |
СООБЩЕНИЕ | / мой | хранить | my.store |
ПОЛУЧИТЬ | /мой мой} | шоу | my.show |
ПОЛУЧИТЬ | / Мой / {мой} / редактировать | редактировать | my.edit |
PUT / PATCH | /мой мой} | Обновить | my.update |
УДАЛЯТЬ | /мой мой} | уничтожить | my.destroy |
Шаг 5 — Попробуйте выполнить URL-адреса, показанные в следующей таблице.
URL | Описание | Выходное изображение |
---|---|---|
HTTP: // локальный: 8000 / мой | Выполняет индексный метод MyController.php | индекс |
HTTP: // локальный: 8000 / мой / создать | Выполняет метод создания MyController.php | Создайте |
HTTP: // локальный: 8000 / меня / 1 | Выполняет метод показа MyController.php | шоу |
HTTP: // локальный: 8000 / мой / 1 / редактировать | Выполняет метод редактирования MyController.php | редактировать |
Неявные контроллеры
Неявные контроллеры позволяют вам определять один маршрут для обработки каждого действия в контроллере. Вы можете определить его в файле route.php с помощью метода Route: controller, как показано ниже.
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 . Вы можете дать любое имя на ваш выбор.
php artisan make:controller ImplicitController --plain
Шаг 2 — После успешного выполнения шага 1 вы получите следующий вывод —
Шаг 3 — Скопируйте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class ImplicitController extends Controller { /** * Responds to requests to GET /test */ public function getIndex() { echo 'index method'; } /** * Responds to requests to GET /test/show/1 */ public function getShow($id) { echo 'show method'; } /** * Responds to requests to GET /test/admin-profile */ public function getAdminProfile() { echo 'admin profile method'; } /** * Responds to requests to POST /test/profile */ public function postProfile() { echo 'profile method'; } }
Шаг 4 — Добавьте следующую строку в файл app / Http / rout.php, чтобы направить запросы на указанный контроллер.
приложение / Http / routes.php
Route::controller('test','ImplicitController');
Конструктор Инъекция
Сервисный контейнер Laravel используется для разрешения всех контроллеров Laravel. В результате вы можете напечатать любые зависимости, которые могут понадобиться вашему контроллеру в его конструкторе. Зависимости будут автоматически разрешены и введены в экземпляр контроллера.
пример
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?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, чтобы проверить внедрение конструктора.
http://localhost:8000/myclass
Шаг 4 — Вывод будет выглядеть, как показано на следующем рисунке.
Инъекция метода
В дополнение к внедрению в конструктор, вы также можете ввести — подсказки зависимости от методов действия вашего контроллера.
пример
Шаг 1 — Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index');
Шаг 2 — Добавьте следующий код в
Файл app / Http / Controllers / ImplicitController.php .
приложение / Http / Контроллеры / ImplicitController.php
<?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, чтобы проверить внедрение конструктора.
http://localhost:8000/myclass
Это даст следующий результат —