Конфликт привязки модели маршрута Laravel при использовании одной и той же структуры с разными моделями
Я пытаюсь создать привязку модели маршрута для двух моделей: "Пользователь" и " статья"
Route::get('/{user}', 'UsersController@show');
Route::get('/{article}', 'ArticlesController@show');
Проблема в том, что один из них всегда будет иметь приоритет над другим, в зависимости от порядка их объявления.
Я хочу, чтобы пользовательский маршрут имел приоритет над маршрутом статей, если пользователь и статья имеют один и тот же маршрут, но проблема в том, что laravel возвращает страницу 404, когда она не соответствует пользователю, даже если маршрут должен соответствовать статье.
Я знаю, что вы можете использовать функцию where() с регулярным выражением для этого, однако обе эти модели используют одну и ту же структуру для имени ключа маршрута (они оба являются строками). Можно ли сделать регулярное выражение поиска столбец базы данных или что-то еще?



Ответы - Конфликт привязки модели маршрута Laravel при использовании одной и той же структуры с разными моделями / Laravel Route Model Binding conflict when using the same structure with different models

23.12.2019 11:18:41
У вас есть 2 варианта:
- Используйте разные маршруты для каждого из них:
Route::get('/users/{user}', 'UsersController@show');
Route::get('/articles/{article}', 'ArticlesController@show');
- Настройка логики разрешения на вашем
RouteServiceProvider.php
:
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
parent::boot();
Route::bind('userOrArticle', function ($value) {
return is_numeric($value)
? App\User::where('id', $value)->firstOrFail()
: App\Article::where('title', $value)->firstOrFail();
});
}
Route::get('/{userOrArticle}', function ($userOrArticle) {
return $userOrArticle instanceof \App\User
? redirect()->action('UsersController@show', ['user' => $userOrArticle]);
: redirect()->action('ArticlesController@show', ['article' => $userOrArticle]);
});
Дополнительную информацию смотрите в разделе "Настройка логики разрешения" документации: https://laravel.com/docs/master/routing#explicit-binding


