Routes 传递给控制器的可选路由参数
在Laravel6.x中,如何为控制器获取可选参数?例如,我的路线:Routes 传递给控制器的可选路由参数,routes,laravel-routing,laravel-6,php-7.3,Routes,Laravel Routing,Laravel 6,Php 7.3,在Laravel6.x中,如何为控制器获取可选参数?例如,我的路线: Route::get('/videos/{limit?}/{channel?}),VideosController@index); 在我的视频控制器中,我有一个方法: 公共功能索引($limit=20,$channel=null) { 如果(!为null($channel)) { $channel_id=channel::where('name',$channel); $result= ->其中('channel\u id
Route::get('/videos/{limit?}/{channel?}),VideosController@index);
在我的视频控制器中,我有一个方法:
公共功能索引($limit=20,$channel=null)
{
如果(!为null($channel))
{
$channel_id=channel::where('name',$channel);
$result=
->其中('channel\u id',$channel\u id)
->限额($限额)
->第一个();
}否则{
$result=
->限额($限额)
}
}
但由于某种原因,我似乎从未陷入
!如果限制
和频道
都是路由中的可选url段,则如果缺少限制
,应用程序将不会知道您打算填充频道
变量。它会将其误认为是限制
在您的情况下,最好是将这些参数作为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))
}
}
公共功能索引()
{
if(request()->has('channel'))
{
$channel_id=channel::where('name',request('channel');
$result=
->其中('channel\u id',$channel\u id)
->限额(请求(“限额”,20))
->第一个();
}否则{
$result=
->限额(请求(“限额”,20))
}
}
然后,例如,查询将是/videos?channel=example&limit=30
request()
helper允许在传递参数时设置默认值。通常,您会看到在控制器中传递的请求,因此您可以使用$request->query('limit',20)
实现相同的操作
我希望这会有所帮助。如果限制
和频道
都是路由中的可选url段,那么如果限制
缺失,应用程序将不会知道您打算填充频道
变量。它会将其误认为是限制
在您的情况下,最好是将这些参数作为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))
}
}
公共功能索引()
{
if(request()->has('channel'))
{
$channel_id=channel::where('name',request('channel');
$result=
->其中('channel\u id',$channel\u id)
->限额(请求(“限额”,20))
->第一个();
}否则{
$result=
->限额(请求(“限额”,20))
}
}
然后,例如,查询将是/videos?channel=example&limit=30
request()
helper允许在传递参数时设置默认值。通常,您会看到在控制器中传递的请求,因此您可以使用$request->query('limit',20)
实现相同的操作
我希望这有帮助