Метод middleware
Метод middleware класса Controller позволяет назначить один или несколько посредников на текущий контроллер или на его отдельные методы. Первым параметром передаётся имя посредника или массив имён, вторым необязательным параметром - массив опций с ключами 'only' и 'except' для ограничения действия посредников на конкретные методы. Метод вызывается в конструкторе контроллера и возвращает экземпляр контроллера для цепочки вызовов.
Синтаксис
<?php
$this->middleware($middleware, $options);
?>
Пример
Давайте назначим посредник 'auth' на все методы контроллера:
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
$users = ['User 1', 'User 2', 'User 3'];
return view('users.index', ['users' => $users]);
}
}
?>
Результат выполнения кода:
"Redirect to login page if user is not authenticated"
Пример
Назначим посредник 'auth' только на метод 'edit':
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth')->only('edit');
}
public function index()
{
$users = ['User 1', 'User 2', 'User 3'];
return view('users.index', ['users' => $users]);
}
public function edit($id)
{
$user = 'User ' . $id;
return view('users.edit', ['user' => $user]);
}
}
?>
Результат выполнения кода для маршрута '/user/1/edit':
"Redirect to login page if user is not authenticated"
Результат выполнения кода для маршрута '/user':
"View users.index is rendered"
Пример
Исключим метод 'index' из-под действия посредника 'auth':
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth')->except('index');
}
public function index()
{
$users = ['User 1', 'User 2', 'User 3'];
return view('users.index', ['users' => $users]);
}
public function edit($id)
{
$user = 'User ' . $id;
return view('users.edit', ['user' => $user]);
}
}
?>
Результат выполнения кода для маршрута '/user':
"View users.index is rendered"
Результат выполнения кода для маршрута '/user/1/edit':
"Redirect to login page if user is not authenticated"
Пример
Назначим несколько посредников сразу через массив:
<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
public function __construct()
{
$this->middleware(['auth', 'verified']);
}
public function index()
{
$users = ['User 1', 'User 2', 'User 3'];
return view('users.index', ['users' => $users]);
}
}
?>
Результат выполнения кода:
"Redirect to login page if user is not authenticated or not verified"
Пример
Назначим посредник с параметром 'role:admin' на метод 'adminPanel':
<?php
namespace App\Http\Controllers;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('role:admin')->only('adminPanel');
}
public function adminPanel()
{
$data = ['Admin Panel', 'Statistics', 'Settings'];
return view('admin.panel', ['data' => $data]);
}
}
?>
Результат выполнения кода:
"Redirect to home if user does not have admin role"
Смотрите также
-
метод
middlewareкласса Route,
который назначает посредники на маршрут -
метод
withoutMiddleware,
который удаляет посредники с маршрута -
метод
authorize,
который проверяет права пользователя на действие -
метод
validate,
который выполняет валидацию входящих данных