【问题标题】:When using the buildForm->add() function in Symfony2, What are the acceptable options?在 Symfony2 中使用 buildForm->add() 函数时,可接受的选项是什么?
【发布时间】:2011-09-21 18:31:16
【问题描述】:

我浏览了文档,除非我错过了它,否则我找不到任何解释 Symfony2 中 buildForm->add() 函数的官方 $options 是什么的任何内容。

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

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

}

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

谢谢

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    这些选项被传递给字段类型,在您的情况下为 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 等内置类型。

    希望对你有帮助。

    问候,
    马特

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

    【讨论】:

    • 谢谢马特,我的问题可能并不完全清楚。传递给 buildForm 函数的 $options 数组看起来很清楚,我所追求的是当你调用 $this->add('foo', 'text', $options) 时你将传递每个字段的选项。不过,我很感谢您的回复,可能对某人有所帮助。
    【解决方案2】:

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

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

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

    【讨论】:

    • 在我的测试中,在 Symfony 2.5 中,您传入的选项不会与您在 AbstractType#setDefaultOptions() 中设置的自定义选项合并。如果我做错了什么我不会,但这对我来说是个大问题。
    猜你喜欢
    • 2019-01-27
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多