Привязка модели маршрута и проверка родительского дочернего элемента в Laravel

Скажем, у меня есть маршрут как:

Route::get('users/{user}/posts/{post}', 'PostController@show')

И я установил привязку Route Model для App\User в {user} и App\Post в {post}, Я видел, что могу вызвать любой существующий пост для любого пользователя, чтобы получить содержимое на экране. Есть ли общее место, где я могу назначить ограничения для связанных моделей?

1

Решение

Ты можешь использовать $router->bind() контролировать, как модель выбирается:

Route::get('/user/{name}', 'PostController@show');

$router->bind('user', function($value) {
return App\User::where('name', $value)->first();
});
1

Другие решения

ты можешь использовать Route::bind и установите вторую переменную для функции доступа к текущему маршруту и ​​ее параметрам, например:

class RouteServiceProvider extends ServiceProvider{
public function boot(Router $router)
{
$router->bind('user', function($value) {
return App\User::findOrFail($value);
});

$router->bind('post', function($value, $route) {
return $route->parameter('user')->posts()->findOrFail($value);
});
}
}
0

Это, безусловно, пробел в Laravel. Я сделал небольшой пакет, чтобы помочь.
https://github.com/tarekadam/laravel-orm-binding-validation

  1. Использовать промежуточное ПО без проверки.
  2. Добавьте промежуточное программное обеспечение, чтобы связывание уже выполнялось.
  3. Определите ожидаемые отношения в контроллере.

Смотрите README.md на упаковке.

0
По вопросам рекламы [email protected]