Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-不同页面上的相同表单_Php_Symfony_Twig - Fatal编程技术网

Php Symfony 2-不同页面上的相同表单

Php Symfony 2-不同页面上的相同表单,php,symfony,twig,Php,Symfony,Twig,我有一个联系人表单,它在我的站点的许多页面上呈现,我需要在许多不同的控制器中处理这个表单。如何在所有控制器中处理此表单? 我不想定义特殊的路由和控制器来处理这个表单,我需要在它呈现的所有页面中处理它 现在,我正在调用控制器acction witch以这种方式呈现我的表单: 在控制器中: 在树枝上: 我正在使用这个代码,我需要每个控制器来处理我的联系方式。有更简单的方法吗? 我的第一个想法是在细枝上做这种事情: {% render 'MyBundle:Profile:profileAskFor

我有一个联系人表单,它在我的站点的许多页面上呈现,我需要在许多不同的控制器中处理这个表单。如何在所有控制器中处理此表单? 我不想定义特殊的路由和控制器来处理这个表单,我需要在它呈现的所有页面中处理它

现在,我正在调用控制器acction witch以这种方式呈现我的表单:

在控制器中:

在树枝上:

我正在使用这个代码,我需要每个控制器来处理我的联系方式。有更简单的方法吗? 我的第一个想法是在细枝上做这种事情:

{% render 'MyBundle:Profile:profileAskForm' with {request: app.request, user: user} %}
但在发送表单后,我无法从那里重定向。问题是,有没有一种简单快捷的方法来打电话

从twig这类组件,比如我的联系人表单,这个组件不仅呈现了一些东西,而且还有一些


应用逻辑。我很乐意使用这种组件作为brick's witch,我可以轻松地将其放在任何地方。

一种可能性是创建一个类,如Contact.php,它将所有字段作为类成员。然后,您可以非常轻松地将资产添加到每个字段:

/**
  * @Assert\NotBlank(message="Please fill in your e-mail at least")
  * @Assert\Email(checkMX = true)
  */
protected $email;
然后,您可以为此类创建名为ContactType.php的表单类型,并在其中使用FormBuilder:

在所有控制器中,您可以重新使用表单。您甚至可以使用一个电子邮件类对其进行扩展,该类处理所有发送的电子邮件,然后将有效的联系人表单插入其中:

$contact = new Contact();
$form = $this->createForm(new ContactType(), $contact);

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

    if ($form->isValid()) {
        // now you can easily inject the class to the one that handles e-mail traffic for example
        $email = new Email();
        $email->sendContactForm($contact);
    }
}

您可以在中深入阅读更多信息。

显示您现在如何调用表单。
/**
  * @Assert\NotBlank(message="Please fill in your e-mail at least")
  * @Assert\Email(checkMX = true)
  */
protected $email;
$builder->add('email', 'email', array('label' => 'E-mail'));
$contact = new Contact();
$form = $this->createForm(new ContactType(), $contact);

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

    if ($form->isValid()) {
        // now you can easily inject the class to the one that handles e-mail traffic for example
        $email = new Email();
        $email->sendContactForm($contact);
    }
}