Компонент маршрутизации не поддерживает это из коробки, насколько я знаю.
Я немного искал код и пришел к выводу, что добавить такой маршрут будет сложно. Способ работы маршрута заключается в том, что каждый маршрут регистрируется до того, как выполняется сопоставление, поэтому маршрут должен существовать. Это означает, что не может быть «подстановочный маршрут».
Я не знаю, если вы приняли это во внимание, но вы всегда можете передать как можно больше информации, как вам нравится с помощью «реальных» получить параметры:
/print/template?optional1=arg&optional2=arg
Это позволит решить вашу проблему и будет работать без каких-либо изменений.
Другой способ справиться с этим - зарегистрировать событие до события, самостоятельно посмотреть на запрос и изменить его. Вы могли бы, например, разделить весь URL на /, посмотреть, соответствует ли шаблон вашему ожидаемому формату, а затем поместить все необязательные аргументы в один аргумент со специальным разделителем символов между ними. Я бы не предложил этого, но это возможно.
Другим способом обработки этого является регистрация собственного ControllerCollection, получение фактического запроса и регистрация маршрута, который соответствует фактическому запросу, в случае наличия необязательных аргументов. Думаю, это было бы немного чище.
Одним из способов решения этого может быть интерфейс. Если ваш запрос всегда ставит дополнительные параметры в последний параметр с особым характером между ними, вы могли бы прочитать этот последний параметр, разделить его и работать с этим:
/print/template/arg:arg
Вашим мог бы что-то вроде:
$app->get('/print/{template}/{args}', function ($template, $args) use ($app) {
$args = explode(':', $args);
$str = $template . " " . $args[0] . " " . $args[1];
return $str;
})
->value('template', FALSE)
->value('args', FALSE);
Я бы выбрал идею 1 или 4, главным образом потому, что 2 и 3 будут сбивать с толку с течением времени и кажутся не очень чистыми.
Я не использую тонкий каркас. – shapeshifter
ohhhh ... ok в любом случае я не думаю, что вы можете передать массив через url –
Я не уверен, что вы понимаете мой вопрос. Поставляемая переменная в контроллере будет массивом да, но вы должны передать URL-адрес, например/print/template/arg/arg/arg/arg или/print/template/arg – shapeshifter