使用Symfony2自定义表单字段

时间:2014-01-29 19:42:59

标签: php forms symfony symfony-forms

几小时前参考my question I asked,我现在会尝试提出更具体的问题。

我遵循了official cookbookthis article的指南。

我在class MyType extends AbstractType direcory中添加了新的Me\MyBundle\Controller\Form\Type

我为该自定义字段类型创建了一个模板。

我在config.yml中添加了正确的条目,以便在表单中使用新模板。

但我该如何使用该自定义字段?

假设我有一个看起来像这样的控制器:

namespace Me\MyBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Me\MyBundle\Form\Type\MyType;

class DefaultController extends Controller
{
    public function indexAction()
    {
        $form = $this->createFormBuilder()
            ->add('my_type', new MyType(), array('param' => 0))
            ->getForm()
        ;
        return $this->render('MyBundle::index.html.twig', array(
            'form'        => $form->createView(),
        ));
    }
}

->add('my_type', new MyType(), array('param' => 0))似乎对生成表单没有任何影响。也没有错误。

如何让我的自定义字段多次以相同的形式重复使用,使用不同的params

编辑:

MyType课程如下所示:

class MyType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'param' => 1,
            )
        ));
    }

    public function getParent()
    {
        return 'text';
    }

    public function getName()
    {
        return 'my_type';
    }
}

1 个答案:

答案 0 :(得分:0)

可以尝试实现buildForm方法:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options
{
    $builder->add(...);
}