在Laravel 6.x中,如何获取控制器的可选参数?例如,我的路线:
Route::get('/videos/{limit?}/{channel?}, VideosController@index);
而且在我的VideosController中,我有一个方法:
public function index($limit=20, $channel=null)
{
if (!is_null($channel))
{
$channel_id = channel::where('name', $channel);
$result =
<some complicated DB query>
->where('channel_id', $channel_id)
->limit($limit)
->first();
} else {
$result =
<some complicated DB query>
->limit($limit)
}
}
但是由于某些原因,我似乎从未陷入!is_null($channel)
案。
如果在路由中选择limit
和channel
,则应用程序将不知道您打算填充channel
变量。它将误认为是limit
变量。
您的情况最好是将其作为GET
参数传递,并在控制器中检查是否已填充它们。
首先,将路线更改为:
Route::get('/videos', VideosController@index);
然后在您的控制器中:
public function index()
{
if (request()->has('channel'))
{
$channel_id = channel::where('name', request('channel'));
$result =
<some complicated DB query>
->where('channel_id', $channel_id)
->limit(request('limit', 20))
->first();
} else {
$result =
<some complicated DB query>
->limit(request('limit', 20))
}
}
然后,查询将是/videos?channel=example&limit=30
。
request()
助手允许在已传递参数的情况下设置默认值。
我希望这会有所帮助。