2016-11-24 2 views
0

Я пытаюсь маршрутизировать URL в Symfony, то URL будет соответствовать имеет 3 вариантаSymfony YML маршрутизации файла с дополнительными параметрами

/test/param1/test.json 
/test/param1/param2/test.json 
/test/param1/param2/param3/test.json 

Я хочу сделать это с одним контроллером и Param2 и Param3 являются необязательными параметры.

Я пробовал регулярное выражение в требованиям param2 и param3, чтобы разрешить строку и ничего, но я не могу получить все 3 пути, чтобы они соответствовали одному и тому же контроллеру.

Благодаря

+1

Простейший способ, я вижу, состоит в том, чтобы объявить 3 маршрута, указывающих на одно и то же действие – OlivierC

ответ

0

Что вы можете сделать, это определить различные маршруты и назначать их в один контроллер-Action:

testparam123: 
    pattern: /test/{param1}/{param2}/{param3}/test.json 
    defaults: { _controller: Bundle:Controller:test} 
testparam12: 
     pattern: /test/{param1}/{param2}/test.json 
     defaults: { _controller: Bundle:Controller:test} 
testparam1: 
     pattern: /test/{param1}/test.json 
     defaults: { _controller: Bundle:Controller:test} 

Затем Контроллер илит метод действия выглядит что-то вроде

public function testAction($param1,$param2=NULL,$param3=NULL) { 
    // do something 
} 

Надежда что помогает

0

Это не будет работать с одной конфигурацией маршрута. Если PARAMS должен быть факультативным, то вы должны оставили параметры запроса пустых, как

/test/param1/param2//test.json 

Здесь Symfony знает, что param3 пуст. В противном случае вы никогда не знаете, какая часть URL пуст, потому что вы могли бы сделать это:

/test/param1/param3/test.json

Как следует признать, что Symfony param2 отсутствует и param3 вместо дается? Вы можете изменить логику от

/test/param1/param2/param3/test.json 

в

/test/param1-param2-param3-test.json 

Thats гораздо проще в обращении.

+0

Я думаю, что решение CiTNOH не соответствует этому: – Rawburner

+0

/test/param1/param3/test.json – Rawburner

1

Вы можете использовать только один параметр маршрута, который позволяет «/», а затем разделить параметры в контроллере. Что-то вроде этого:

_test: 
    path:  /test/{params}/test.json 
    defaults: { _controller: AppBundle:Demo:test } 
    requirements: 
     params: .+ 

И контроллер:

public function testAction(Request $request, $params) 
{ 
    dump($params); // param1/param2/param3 
    $paramsArray = split("/", $params); 
} 

Это whould работать для любого числа параметров!

Смежные вопросы