Routes 传递给控制器的可选路由参数

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

在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',$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)
实现相同的操作

我希望这有帮助