Метод routeIs
Метод routeIs применяется к объекту запроса
и позволяет проверить, соответствует ли текущий маршрут
указанному имени или шаблону. В качестве параметра
метод принимает строку с именем маршрута или шаблоном
для сравнения. Если переданный параметр совпадает
с именем текущего маршрута, метод возвращает true,
в противном случае - false. Метод удобно использовать
для условного выполнения логики в зависимости от того,
на какой странице находится пользователь.
Синтаксис
<?php
$request->routeIs($routeName);
?>
Пример
Давайте проверим, соответствует ли текущий маршрут
имени 'home':
<?php
use IlluminateHttpRequest;
Route::get('/', function (Request $req) {
if ($req->routeIs('home')) {
echo 'This is the home page';
} else {
echo 'This is not the home page';
}
})->name('home');
?>
Результат выполнения кода при переходе на главную страницу:
"This is the home page"
Пример
Давайте проверим, соответствует ли текущий маршрут
шаблону 'admin.*', например, для всех маршрутов
административной панели:
<?php
use IlluminateHttpRequest;
Route::get('/admin', function (Request $req) {
if ($req->routeIs('admin.*')) {
echo 'Access to admin panel';
} else {
echo 'Access denied';
}
})->name('admin.index');
?>
Результат выполнения кода при переходе на /admin:
"Access to admin panel"
Пример
Давайте используем метод routeIs в контроллере
для определения активного пункта меню:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class MenuController extends Controller
{
public function index(Request $req)
{
$menuItems = [
['name' => 'Home', 'route' => 'home'],
['name' => 'About', 'route' => 'about'],
['name' => 'Contact', 'route' => 'contact'],
];
$res = [];
foreach ($menuItems as $item) {
if ($req->routeIs($item['route'])) {
$res[] = $item['name'] . ' (active)';
} else {
$res[] = $item['name'];
}
}
return $res;
}
}
?>
Результат выполнения кода при нахождении на странице about:
["Home", "About (active)", "Contact"]
Пример
Давайте проверим соответствие маршрута нескольким возможным именам с помощью массива:
<?php
use IlluminateHttpRequest;
Route::get('/profile', function (Request $req) {
$isProfile = $req->routeIs(['profile.show', 'profile.edit']);
if ($isProfile) {
echo 'This is a profile page';
} else {
echo 'This is not a profile page';
}
})->name('profile.show');
?>
Результат выполнения кода при переходе на /profile:
"This is a profile page"