【问题标题】:Submit form to another controller in Symfony在 Symfony 中向另一个控制器提交表单
【发布时间】:2017-01-28 19:02:20
【问题描述】:

我有一个页面index.html.twig,其中包含一个Form 提交时,此表单经过验证,结果显示在页面success.html.twig 中。现在我有一个新要求,其中页面success.html.twig 本身包含一个表单,该表单应包含表单从index.html.twig 传递的值,如果用户想要新表单还应允许用户直接从@ 进行搜索987654327@。该要求的灵感来自hostel world

问题

  1. 是否有可以用来实现解决方案的设计模式
  2. 我目前的想法是为success.html.twig 创建一个新的Action,并将表单提交给thatAction,而不是从index.html.twig 的Action 中渲染success.html.twig。这是正确的吗?如何实施?

代码(部分)

 /**
 * @Route("/", name="homepage")
 */
public function indexAction(Request $request)
{
    $event = new Event();
    $form = $this->createForm(MyForm::class, $event);
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {
        $event->setPlace($form["place"]->getData());


        $event->setDate($form["date"]->getData()->modify('+12 hours'));
        return $this->render('default/frontend/success.html.twig',
            array('events' => $events, 'cityName' => $cityName, 'cityImage' => $cityImage)
        );
    }

    return $this->render('default/frontend/index.html.twig', array('form' => $form->createView()));
}

【问题讨论】:

  • 我认为为成功创建一个新动作是正确的。在创建表单时,您可以试试这个:$form =$this->createForm(new Event(), $event);。所以你用你从indexAction收到的值填充你的新表单

标签: php forms symfony design-patterns


【解决方案1】:

有两种不同的操作是有意义的——至少对于不同的请求类型(GET、POST 等)

只有一件事可以作为建议:$form->isValid() 里面已经有一个isSubmitted() 支票。所以不需要检查是否提交。

【讨论】:

  • 但目前index.html.twig的动作是表单提交后呈现success.html.twig的动作。创建成功后如何调用success.html.twig 的操作?目前我对 success.html.twig 没有任何操作
  • 请注意,从 Symfony 4.0 开始,将不再支持调用 isValid() 来获取未提交的表单(参见 github.com/symfony/symfony/blob/master/UPGRADE-3.2.md#form)。所以先调用isSubmitted()确实是正确的方法。
  • 您可以告诉您的表单使用特定操作来提交您的请求 - 默认将是相同的操作。例如$this->createForm(MyForm::class, $event, $options);虽然 $options 可能是 ['action' => '/some/other/url or route', 'method' => 'POST'] @xabbuh thx 的建议.. 不知道。
猜你喜欢
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
相关资源
最近更新 更多