Laravel 4: Как передать несколько необязательных параметров

Я новичок в laravel, и я действительно пытаюсь понять, как передать несколько необязательных параметров URL.

Каков стандартный способ кодирования маршрутов при передаче 3 дополнительных параметров контроллеру?

Также есть способ закодировать маршрут, чтобы позволить именованным параметрам передавать контроллер?

такие как

public/test/id=1&page=2&opt=1 or public/test/id=1/page=2/opt=1 

Спасибо за любую помощь

Если у вас есть несколько необязательных параметров

 Route::get('test',array('as'=>'test','uses'=>'HomeController@index')); 

И внутри вашего контроллера

  class HomeController extends BaseController { public function index() { // for example public/test/id=1&page=2&opt=1 if(Input::has('id')) echo Input::get('id'); // print 1 if(Input::has('page')) echo Input::get('page'); // print 2 //... } } 

Именованные параметры обычно выполняются как сегменты маршрута, но без явного именования. Так, например, вы могли бы что-то вроде этого:

 Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) { // do something }); 

$id , $page и $opt являются необязательными здесь, как определено ? в определениях сегментов и тот факт, что они имеют значения по умолчанию в функции. Однако вы заметите, что здесь есть что-то вроде проблемы:

  1. Они должны отображаться в URL-адресе в правильном порядке
  2. Только $opt является поистине необязательным, $page должна быть поставлена, если $opt is, и $id должен быть, если $page

Это ограничение связано с тем, что Laravel сопоставляет названные сегменты параметрам функции / метода. Теоретически вы могли бы реализовать свою собственную логику для выполнения этой работы:

 Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) { if ($first) { list($name, $value) = @explode('=', $first, 2); $$name = $value; } if ($second) { list($name, $value) = @explode('=', $second, 2); $$name = $value; } if ($third) { list($name, $value) = @explode('=', $third, 2); $$name = $value; } // you should now have $id, $page and $opt defined if they were specified in the segments }); 

Не то, чтобы это было очень наивное решение, полагаясь на слепое взорвание на = а также на установление имени произвольно введенной переменной (которая, очевидно, требует неприятностей). Вы должны добавить дополнительную проверку этого кода, но он должен дать вам представление о том, как преодолеть вышеупомянутые две проблемы.

Следует, наверное, отметить, что это похоже на «правильный путь» для выполнения маршрутизации и URI в Laravel, поэтому, если вам действительно не нужна эта функциональность, вы должны переосмыслить, как вы формируете эти URI, таким образом, чтобы структура Laravel больше настроек для.