在Symfony2中使用buildForm-> add()函数时,有哪些可接受的选项?

时间:2011-09-21 18:31:16

标签: php symfony

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

public function buildForm(FormBuilder $builder, array $options)
{

    $builder->add('fieldname1');        
    $builder->add('fieldname2', new formObjectType(), $arrayOptions);

}

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

由于

2 个答案:

答案 0 :(得分:4)

这些选项会传递给字段类型,例如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 ...
    }
}

如果选项是传递的数组中的数组,或者根本没有传递数组,则在formObjectType中设置默认值。因此,此数组用于自定义预期给定类型的选项。这也适用于内置类型,例如textdate等。

希望它有所帮助。

的问候,
马特

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

答案 1 :(得分:3)

同样的问题也困扰着我。默认选项写在相应的type classes内。我们以DateType为例。

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

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