我查看了文档,除非我错过了,否则我无法找到任何解释symfony2中buildForm-> add()函数的官方$选项的内容。
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('fieldname1');
$builder->add('fieldname2', new formObjectType(), $arrayOptions);
}
采用上面的代码,哪些选项将作为第二个字段的数组传递。
由于
答案 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
中设置默认值。因此,此数组用于自定义预期给定类型的选项。这也适用于内置类型,例如text
,date
等。
希望它有所帮助。
的问候,
马特
P.S。您应该使用大写字母开始您的类名:FormObjectType
而不是formObjectType
,以区分变量和方法与类名。这只是一个建议:)
答案 1 :(得分:3)
同样的问题也困扰着我。默认选项写在相应的type classes内。我们以DateType
为例。
DateType::getDefaultOptions()
列出了所有默认选项,如果您没有自己定义它们。另外我们有DateType::getAllowedOptionValues()
- 它似乎定义哪些值对某些选项有效。
请注意,所有类都扩展AbstractType
,除了此继承之外,每个“type”都实现FormTypeInterface::getParent()
。对于DateType
,父级为FieldType
。 FieldType
显然是大多数字段的父类,它也定义了几个默认选项。我猜测所有这些选项在调用特定表单类型时合并在一起。