Symfony2 необязательные параметры маршрута с ключами

В symfony2 routing.yml я пытаюсь создать маршрут с дополнительными параметрами, такими как это:

/app/type/{typeValue}/page/{page}

Итак, пример, который будет работать:

/app/test/type/hello/page/1

Мой маршрут:

api_test:
pattern:   /api/test/type/{typeValue}/page/{page}
defaults: { _controller: TestCoreBundle:Json:test, page:1 }

Это нормально, но я хочу, чтобы / type / {typeValue} и / page / {page} были необязательными, так что это работает и для URL, как это:

/app/test
/app/test/page/3
/app/test/type/myType

Мои другие маршруты также будут содержать более сложные необязательные параметры, поэтому для меня важно решить эту проблему. Что мне нужно сделать, чтобы мне не нужно было создавать отдельные маршруты, чтобы он поддерживал каждую комбинацию?

0

Решение

Как объяснено на страница Symfony все после необязательного заполнителя тоже должно быть необязательным.

Конечно, вы можете иметь более одного необязательного заполнителя (например,
/blog/{slug}/{page}), но все после дополнительного заполнителя
должен быть необязательным. Например, /{page}/blog допустимый путь, но страница
всегда будет требоваться (т.е. просто /blog не будет соответствовать этому маршруту).

В твоем случае {typeValue} необязательно, но следует /page/ что не является обязательным, поэтому этот маршрут никогда не будет работать с обоими параметрами необязательно.
Вы можете использовать строки запроса или изменить свой маршрут на что-то вроде

api_test:
pattern:   /api/test/{typeValue}/{page}
defaults: { _controller: TestCoreBundle:Json:test, typeValue: 'default', page: 1 }
requirements:
page:  \d+

После этого вы сможете использовать маршруты

/app/test
/app/test/myType
/app/test/myType/3

Но даже тогда маршрут /app/test/3 не возможно, так как Symfony будет интерпретировать это как $typeValue = 3 а также $page по умолчанию.

0

Другие решения

Параметры динамической маршрутизации по-прежнему необходимо заполнять или задавать по умолчанию, я бы рекомендовал передать их в качестве параметров, а затем добавить к строке запроса, например? Page = 1&myType = blah и используйте $ request-> get () в вашем контроллере, базовый класс.

0

По вопросам рекламы [email protected]