传递给控制器的可选路由参数
Optional routing params passed to controller
在 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)
.
达到同样的效果
希望对您有所帮助。
在 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)
.
希望对您有所帮助。