我已经看过文档,除非我错过了它,否则我无法找到任何解释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
,父节点是FieldType
。FieldType
显然是大多数字段的父类,它也定义了几个默认选项。我猜所有这些选项在调用特定的表单类型时合并在一起。