Я новичок в 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
являются необязательными здесь, как определено ?
в определениях сегментов и тот факт, что они имеют значения по умолчанию в функции. Однако вы заметите, что здесь есть что-то вроде проблемы:
$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 больше настроек для.