2013-12-02 3 views
0

Я хотел бы создать блок Jumpbox с некоторой формой и поместить его в боковую панель макета. Форма будет иметь сущность select и точно кнопку Go. Основание на документации Мне нужно отобразить шаблон формы, используя {{ render(controller(...)) }}, но я действительно не знаю, где tu поместил логику формы.Блок в боковой панели - где поставить логику?

Хорошо, чтобы создать метод в контроллере, который использует сущности из выбранного? но мне кажется, мне нужно создать два метода: первый для рендеринга формы (без какого-либо маршрута), а второй для запроса отправки формы (с маршрутом для метода «POST»)?

Может ли кто-нибудь предоставить мне несколько советов, как это сделать правильно?

+1

Я обычно имею 'CommonController' для таких вещей, как те ... –

+0

@jperovic ok, но в этом случае мне нужно получить текущий маршрут в этом действии, чтобы правильно перенаправить пользователей после отправки формы. Сохранить маршрут как скрытое поле? – deem

ответ

1

Сначала вам понадобится контроллер, как вы грустите, это отобразит эту часть боковой панели, и действие должно быть одним и тем же контроллером, поэтому просто создайте для него маршрутизатор.

И вам также было грустно правильно, создать скрытое поле и установить там текущий маршрут. Но это сложная часть, потому что, когда вы вызываете эту «суб» визуализацию, внутри контроллера всегда будет маршрут, какой маршрут для контроллера, так что вам нужно делать, когда вы визуализируете контроллер, который вам нужно пройти в переменной, каков текущий маршрут, что вы можете сделать легко, передав значение переменной {{ app.request.attributes.get('_route') }}, что является ИМЯ маршрута, а затем в вашем контроллере, в конце вы возвращаете новый RedirectResponse($this->generateUrl($url)).

И оба варианта рендеринга формы и «процесса» могут находиться в одном контроллере, или если вы предпочитаете его, вы можете разобрать его, но я бы использовал только один, и вы можете протестировать запрос , каков текущий метод, если POST, то вы будете искать переменную и установить session/cookie/что у вас есть.

EDIT:

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

+0

Я проконсультировался с ним со своими друзьями, и они сказали точно то же самое. Тем не менее, мне не нравится этот шаг с передачей значения 'app.request.attributes.get ('_ route')' для метода контроллера в файлах вида. Это не круто для меня: /. – deem

+0

Я обнаружил, что мы не должны 'app.request.attributes.get ('_ route')' -> https://github.com/symfony/symfony/issues/854 – deem

+1

Ну, если вы также видите, что это 3 года старый комментарий, Symfony сильно изменился за время. И это также надежный вариант. Но я представлю другой путь - – ghostika

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