1 php laravel route-model-binding
我正在尝试为两个模型创建路由模型绑定:“用户”和“文章”
Route::get('/{user}', 'UsersController@show');
Route::get('/{article}', 'ArticlesController@show');
问题是,其中一个总是优先于另一个,这取决于它们的声明顺序。
如果用户和文章恰好具有相同的路由,我希望用户路由优先于文章路由,但问题是 laravel 在与用户不匹配时返回 404 页面,即使路由应该匹配文章。
我知道您可以为此使用带有正则表达式的 where() 函数,但是这两个模型对路由键名称使用相同的结构(它们都是字符串)。我可以让正则表达式搜索数据库列或其他东西吗?
您有 2 个选择:
Route::get('/users/{user}', 'UsersController@show');
Route::get('/articles/{article}', 'ArticlesController@show');
Run Code Online (Sandbox Code Playgroud)
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();
});
}
Run Code Online (Sandbox Code Playgroud)
Route::get('/{userOrArticle}', function ($userOrArticle) {
return $userOrArticle instanceof \App\User
? redirect()->action('UsersController@show', ['user' => $userOrArticle]);
: redirect()->action('ArticlesController@show', ['article' => $userOrArticle]);
});
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档的“自定义解析逻辑”部分:https : //laravel.com/docs/master/routing#explicit-binding
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |