Laravel 6可选路由参数

问题描述 投票:0回答:1

在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)案。

routes laravel-routing laravel-6 php-7.3
1个回答
0
投票

如果在路由中选择limitchannel,则应用程序将不知道您打算填充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()助手允许在已传递参数的情况下设置默认值。

我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.