在Symfony2中使用buildForm->add()函数时,可接受的选项是什么?


When using the buildForm->add() function in Symfony2, What are the acceptable options?

我已经看过文档,除非我错过了它,否则我无法找到任何解释buildForm->add()函数在Symfony2中的官方$选项。

public function buildForm(FormBuilder $builder, array $options)
{
    $builder->add('fieldname1');        
    $builder->add('fieldname2', new formObjectType(), $arrayOptions);
}

以上面的代码为例,将哪些选项作为数组传递给第二个字段。

谢谢

这些选项被传递给字段类型,在您的示例中是formObjectType。所以,这真的取决于这个领域接受什么选项。例如,假设您想传递一个选项来告诉formObjectType显示或不显示给定字段。你可以这样做:

// Application/AcmeBundle/Form/Type/FormObjectType.php
class FormObjectType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $this->add('name', 'text');
        if ($options['display_custom_field'] === true) {
            $this->add('name_custom', 'text');
        }
    }
    public function getDefaultOptions(array $options)
    {
        return array(
            'display_custom_field' => false,
        );
    }
}
// Application/AcmeBundle/Controller/FormController.php
class FormController extends Controller 
{
    public function createForm($object)
    {
        return $this->getFormFactory()->create(new FormObjectType(), $object, array(
            'display_custom_field' => true,
        ));
    }
    public function customAction() 
    {
        $form = $this->createForm();
        // Code here ...
    }
}

如果该选项是在传递array或不传递array,则在formObjectType中设置默认值。因此,该数组用于自定义给定类型所期望的选项。这也适用于内置类型,如text, date等。

希望有帮助。


问候,马特

注:您应该以大写字母FormObjectType(而不是formObjectType)开始您的类名,以区分变量和方法与类名。这只是一个建议:)

同样的问题也困扰着我。默认选项在各自的类型类中编写。以DateType为例。

DateType::getDefaultOptions()列出了所有默认选项,如果您没有自己定义它们的话。此外,我们还有DateType::getAllowedOptionValues() -它似乎定义了哪些值对某些选项有效。

注意所有的类都扩展了AbstractType,并且除了这个继承之外,每个"类型"都实现了FormTypeInterface::getParent()。对于DateType,父节点是FieldTypeFieldType显然是大多数字段的父类,它也定义了几个默认选项。我猜所有这些选项在调用特定的表单类型时合并在一起。