Forms Symfony2细枝扩展:创建表单

Forms Symfony2细枝扩展:创建表单,forms,symfony,twig,Forms,Symfony,Twig,我想有一个联系人表单块,我可以在不同的页面和模板上重用。所以我决定写一个细枝扩展。问题是我无法访问createFormBuilder()函数。第二个问题是我无法访问请求对象进行验证。我当前的代码如下所示: <?php namespace Name\NameBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Req

我想有一个联系人表单块,我可以在不同的页面和模板上重用。所以我决定写一个细枝扩展。问题是我无法访问createFormBuilder()函数。第二个问题是我无法访问请求对象进行验证。我当前的代码如下所示:

<?php

namespace Name\NameBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class ContactExtension extends \Twig_Extension
{
    function getName() {
        return 'contact_extension';
    }

    function getFunctions() {
        return array(
           'contactform' => new \Twig_Function_Method($this, 'contactform'),
        );
    }

    function contactform() {
        $form = $this->createFormBuilder()
           ->add('Name', 'text')
           ->add('Message', 'textarea')
           ->add('Send', 'submit')
           ->getForm();

        return $this->render('NameBundle:forms:contactform.html.twig', array(
            'form' => $form->createView(),
    }
}
createFormBuilder()
是一个帮助程序,允许您通过容器(下面的代码)访问控制器中的
form.factory
服务

您在这里的“控制器上下文”中不是,因此如果您想在扩展中使用
form.factory
服务,您必须注入它

但是,

我不会建议您以这种方式管理您的
联系人表单
(使用细枝扩展功能)。为什么不在相应的控制器中创建一个
contactAction
。然后,您可以使用twig
render
helper在模板中呈现表单

{{ render(controller('YourBundle:YourController:contactAction')) }} 

如果您使用Symfony使代码清晰,您应该在不同的文件中创建表单(src/Forms),并在视图和控制器中调用它。

这给了我未定义的属性$container(我刚刚将此函数复制到我的类中),您必须理解我的答案。我没有建议您将此方法添加到扩展中,我只是指出了用于控制器的方法,以帮助您了解此方法的用途。因此。。。如何注射?:)我不会建议您以这种方式管理您的联系人表单(使用细枝扩展功能)。为什么不在控制器中创建一个action contactAction呢。您可以使用twig render helper在模板中呈现它,{render(controller('YourBundle:YourController:contactAction'))}确实是一个更干净的解决方案!
{{ render(controller('YourBundle:YourController:contactAction')) }}