Форма Symfony 2 во встроенном контроллере и AJAX - PullRequest
2 голосов
/ 11 ноября 2011

В Symfony 2 можно встроить контроллер в шаблон.Например, у меня может быть шаблон для поста в блоге, но я также могу встроить контроллер в опрос или список лучших статей на боковой панели шаблона.

Я заинтересован встраиваниемконтроллер, который обеспечивает опрос.Для этого я создал контроллер:

public function poll(Request $request)
{
    $task = new Poll();

    $form = $this->createFormBuilder($task)
        ->add('radio', 'one')
        ->add('radio', 'two')
        ->add('radio', 'three')
        ->getForm();

    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);

        if ($form->isValid()) {
            //save and show how many people voted for each option
        }
    }

    return $this->render('PollBundle:Default:new.html.twig', array(
            'form' => $form->createView(),
        ));

}

Затем я могу встроить его в качестве элемента боковой панели в свой шаблон:

<div id="sidebar">
    {% render "PollBundle:Poll:poll" %}
</div>

Проблема теперь заключается в следующем: если яустановите для действия формы значение "", тогда, если опрос был отправлен, запрос будет проходить через главный контроллер, который встраивает контроллер опроса.Затем я могу использовать скрытое поле, чтобы проверить, был ли опрос отправлен с использованием формы опроса, затем обновить базу данных и отобразить результат.Затем он возвращается в шаблон основного контроллера, и все хорошо.

Теперь я хотел бы использовать AJAX для упрощения отправки форм для тех, у кого включен JavaScript.Как я могу сделать это?Поскольку действие формы установлено на "", запрос будет проходить через главный контроллер, визуализировать шаблон, который затем вызывает контроллер опроса.Но я хотел бы просто вернуть ответ AJAX, содержащий голоса, отданные за каждый элемент.В любом случае, необходимость проходить через главный контроллер только для того, чтобы заполнить опрос с использованием AJAX-запроса, также кажется довольно расточительной.

Как мне поступить так?

1 Ответ

1 голос
/ 12 ноября 2011

Вы можете указать форму для ее собственного действия, которое обрабатывает сообщение, и, если оно запрашивается через ajax, затем возвращать результаты или, если оно достигнуто посредством обычного запроса, перенаправить на HTTP_REFERER ($this->get('request')->server->get('HTTP_REFERER')).

Если вы не хотите полагаться на реферер, вы можете также сохранить текущий URI в переменной сеанса при рендеринге опроса (в описанном выше опросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...