2013-09-27 2 views
0

Я новичок в Symfony, и я стараюсь, чтобы получить все части из URL, отформатированный как это:Как получить части пути от пути Symfony2

...pathToSite/Symfony/pathToBundleControllerAction/part1/part2/...../partN 

я смог бы получить все part[1..N] индивидуально, поскольку цель состоит в том, чтобы иметь дорожки неизвестной длины, чтобы выталкивать некоторые разные типы данных на сервер через один маршрут.

Я пробовал некоторые варианты, найденные в Интернете, например $this->getRequest()->query->all() (в контроллере), но ни один из них не делал то, что я ожидал.

Возможно, существует очень простое решение, изменяя маршрутизацию или несколько иначе?

Спасибо.

ответ

0

Ну, чтобы ответить на ваш вопрос, вам не нужно разбирать их, они являются частью запроса и должны однозначно определять запрос. Например, у вас есть следующий хорошо известный пример:

# routing.yml: 
dummy_page_homepage: 
    pattern: /hello/{name} 
    defaults: { _controller: DummyPageBundle:Default:index } 

// DefaultController.php 
public function indexAction($name) 
{ 
    return $this->render('DummyPageBundle:Default:index.html.twig', array('name' => $name)); 
} 

Посмотрите, как {name} и $ name подходят? Это означает что-либо после того, как/hello/... разобран и передан параметру функции имени, который вы можете использовать по своему усмотрению. Если бы вы просто получили/привет, без каких-либо изменений в вашем запросе url, вы бы не обнаружили исключение. Маршруты уникальны, и имена и числа параметров определяют, какой маршрут будет выполнен.

Теперь, из вашего вопроса, я думаю, вы хотите иметь неизвестное количество таких параметров. Я не думаю, что это возможно в Symfony. Честно говоря, я не думаю, что это возможно в любой среде MVC. Я думаю, вы выбрали неправильный подход. Это то, что я сделал бы, если бы был вами.

Прежде всего, кажется, вы пытаетесь отправить данные на сервер для какой-либо функции вставки/обновления. Глядя на стандарты HTTP, запрос GET должен делать то, что говорит его имя, извлекать что-то с сервера, не изменяя его. Это означает, что вы должны использовать запрос POST. Если это так, вы можете хранить такие длинные переменные, как переменные POST, и отправлять их на сервер без особых проблем. Затем вы можете использовать логику сервера для извлечения и анализа этих переменных (Symfony упрощает получение переменных GET или POST с использованием экземпляра объекта запроса). Кроме того, я уверен (хотя и не на 100%), что вы можете использовать только ограниченное количество данных в GET-переменной, а также длина самой части запроса также ограничена. Вот почему вы должны использовать переменные POST. Вы также можете отправлять переменную массива POST, если она лучше подходит для вашего прецедента и наполняет значения part1, part2 ... partn как значения массива.

Надеюсь, это даст вам еще одну точку зрения на вашу проблему. Если вы хотите обсудить это дальше, просто стреляйте.

+0

Подтверждено не из-за кода, а из объяснения. Действительно, мне нужны были данные POST для передачи произвольных данных. – Benj

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