Route::has
Метод has класса Route предназначен для проверки
существования маршрута по его имени. Он возвращает true,
если маршрут с указанным именем зарегистрирован в приложении,
и false в противном случае. Это полезно для условной
обработки, когда необходимо проверить наличие определённого
маршрута перед генерацией ссылки или выполнением редиректа.
Синтаксис
<?php
Route::has($name);
?>
Метод принимает один обязательный параметр:
-
$name- строковое имя маршрута, которое было задано при регистрации через методname
Пример
Давайте зарегистрируем маршрут с именем 'profile'
и проверим его существование с помощью метода has:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/profile', function () {
return 'User profile';
})->name('profile');
// Проверяем существование маршрута
$res = Route::has('profile');
var_dump($res);
$res2 = Route::has('settings');
var_dump($res2);
?>
Результат выполнения кода:
bool(true)
bool(false)
Пример
Используем метод has внутри контроллера
для условного редиректа в зависимости от наличия маршрута:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Route;
class UserController extends Controller
{
public function show($id)
{
if (Route::has('profile')) {
return redirect()->route('profile');
}
return response()->json([
'message' => 'Profile route not found'
]);
}
}
?>
Пример
Рассмотрим использование метода has
в Blade-шаблоне для условного отображения ссылки:
@if (Route::has('profile'))
<a href="{{ route('profile') }}">Profile</a>
@else
<span>Profile page is not available</span>
@endif
@if (Route::has('settings'))
<a href="{{ route('settings') }}">Settings</a>
@endif
Результат выполнения кода (если маршрут 'profile' существует, а 'settings' - нет):
<a href="http://example.com/profile">Profile</a>
<span>Settings page is not available</span>
Пример
Метод has также работает с маршрутами,
зарегистрированными в группах с префиксами:
<?php
use Illuminate\Support\Facades\Route;
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
return 'Admin dashboard';
})->name('admin.dashboard');
Route::get('/users', function () {
return 'Users list';
})->name('admin.users');
});
// Проверяем существование маршрутов
$res = Route::has('admin.dashboard');
var_dump($res);
$res2 = Route::has('admin.posts');
var_dump($res2);
?>
Результат выполнения кода:
bool(true)
bool(false)
Пример
Практическое применение метода has
при работе с модульной структурой приложения:
<?php
namespace App\Services;
use Illuminate\Support\Facades\Route;
class MenuService
{
public function getMenuItems(): array
{
$items = [
['label' => 'Home', 'route' => 'home'],
['label' => 'About', 'route' => 'about'],
['label' => 'Contact', 'route' => 'contact'],
['label' => 'Blog', 'route' => 'blog'],
['label' => 'Profile', 'route' => 'profile'],
];
$res = [];
foreach ($items as $item) {
if (Route::has($item['route'])) {
$res[] = $item;
}
}
return $res;
}
}
?>