在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
都是路径中的可选URL段,则如果channel
丢失,则应用程序将不知道您打算填充limit
变量。它将误认为它是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()
帮助器允许在已传递参数的情况下设置默认值。通常,您会看到在控制器内传递的请求,因此可以使用$request->query('limit', 20)
实现相同的功能。
我希望这会有所帮助。