Laravel (5.7) Контроллеры
Классы контроллеров могут использоваться при определении всей вашей логики обработки запросов. Контроллеры могут сгруппировать связанную логику обработки запросов в один класс. Контроллеры хранятся в каталоге app / Http / Controllers.
Создание контроллера
Откройте командную строку или терминал в зависимости от используемой операционной системы и введите следующую команду, чтобы создать контроллер с помощью Artisan CLI (интерфейс командной строки).
php artisan make:controller <controller-name>
Замените <имя-контроллера> на имя вашего контроллера. Созданный конструктор можно увидеть в app / Http / Controllers .
Вы увидите, что базовое кодирование для вас уже сделано, и вы можете добавить свой собственный код. Созданный контроллер может быть вызван из rout.php по следующему синтаксису.
Синтаксис
Route::get('base URI','[email protected]');
пример
Шаг 1 - Выполните следующую команду, чтобы создать UserController.
php artisan make:controller UserController
Шаг 2 - Вы можете увидеть созданный контроллер в 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' => '[email protected]'
]);
Здесь мы назначаем промежуточное ПО авторизации для 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' => '[email protected]'
]);
Шаг 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
Шаг 7 - Скопируйте следующий код в файл 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;
}
}
Шаг 8 - Теперь запустите внутренний веб-сервер PHP, выполнив следующую команду, если вы еще не выполнили ее.
php artisan serve
Шаг 9 - Посетите следующий URL
HTTP: // локальный: 8000 / UserController / путь
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.delete |
Неявные контроллеры
Неявные контроллеры позволяют вам определять один маршрут для обработки каждого действия в контроллере. Вы можете определить его в файле 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
Шаг 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 {
/**
* 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';
}
}
Шаг 3 - Добавьте следующую строку в файл 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','[email protected]');
Шаг 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: // локальный: 8000 / MyClass
Инъекция метода
В дополнение к внедрению в конструктор, вы также можете ввести - подсказки зависимости от методов действия вашего контроллера.
пример
Шаг 1 - Добавьте следующий код в файл app / Http / rout.php .
приложение / Http / routes.php
class MyClass{
public $foo ='bar';
}
Route::get('/myclass','[email protected]');
приложение / 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: // локальный: 8000 / MyClass
Предыдущая: Laravel (5.7) CSRF Защита
Далее: Laravel (5,7) запросов
Новый контент: Composer: менеджер зависимостей для PHP , R программирования