Метод bind
Метод bind применяется к объекту маршрута
и позволяет явно задать логику разрешения модели
для указанного параметра. Первым параметром
передаётся имя параметра, вторым - замыкание,
которое принимает значение параметра и возвращает
модель или null.
Синтаксис
<?php
Route::get('/users/{user}', function (User $user) {
return $user;
})->bind('user', function ($value) {
return User::findOrFail($value);
});
?>
Пример
Давайте привяжем модель User к параметру 'user'
с использованием замыкания:
<?php
use AppModelsUser;
use IlluminateSupportFacadesRoute;
Route::get('/users/{user}', function (User $user) {
return 'User: ' . $user->name;
})->bind('user', function ($value) {
return User::where('slug', $value)->firstOrFail();
});
?>
Результат выполнения кода при переходе по адресу /users/john-doe:
"User: John Doe"
Пример
Давайте используем привязку с дополнительной логикой проверки активного статуса пользователя:
<?php
use AppModelsUser;
use IlluminateSupportFacadesRoute;
Route::get('/profile/{user}', function (User $user) {
return 'Profile: ' . $user->email;
})->bind('user', function ($value) {
$user = User::where('id', $value)->first();
if (!$user || !$user->is_active) {
abort(404, 'User not found or inactive');
}
return $user;
});
?>
Результат выполнения кода для активного пользователя:
"Profile: john@example.com"
Результат выполнения кода для неактивного пользователя:
"404: User not found or inactive"
Пример
Давайте привяжем модель Post с проверкой
принадлежности текущему пользователю:
<?php
use AppModelsPost;
use AppModelsUser;
use IlluminateSupportFacadesRoute;
use IlluminateSupportFacadesAuth;
Route::get('/posts/{post}', function (Post $post) {
return 'Post: ' . $post->title;
})->bind('post', function ($value) {
$post = Post::with('user')->where('slug', $value)->first();
if (!$post || $post->user_id !== Auth::id()) {
abort(403, 'You do not own this post');
}
return $post;
});
?>
Результат выполнения кода для поста, принадлежащего авторизованному пользователю:
"Post: My New Article"
Смотрите также
-
метод
get,
который определяет маршрут для GET-запросов -
метод
where,
который добавляет ограничения на параметры маршрута -
метод
middleware,
который назначает промежуточное ПО для маршрута -
метод
scopeBindings,
который включает привязку области видимости для вложенных моделей