【发布时间】:2016-12-01 12:52:10
【问题描述】:
我有以下表格:
class TestFormType extends AbstractType
{
protected $testArgument;
public function buildForm(FormBuilderInterface $builder, array $options)
{
if (isset($options['testArgument'])) {
$this->testArgument = $options['testArgument'];
}
$builder->add('textField', 'Symfony\Component\Form\Extension\Core\Type\TextType');
}
public function configureOptions(OptionsResolver $optionsResolver)
{
$optionsResolver->setRequired('testArgument');
$optionsResolver->setDefaults(
array(
'data_class' => get_class($this->testArgument)
)
);
}
}
我正在通过表单选项(Symfony 3 修改)传递 testArgument 属性的值,但是当获取属性的类名以在 configureOptions 方法中设置 'data_class' 时,它总是null。基本上我需要依赖configureOptions 方法中的表单类型类属性。有人可以帮我找到正确的方向吗?
【问题讨论】:
-
根据 php doc
get_class返回以object为实例的类的名称。如果 object 不是对象,则返回FALSE。如果在类中省略 object,则返回该类的名称。也许get_class返回 false 因为您没有将对象传递给它。 -
很确定 configureOptions 在 buildForm 之前被调用。可能会添加一些死亡声明来确认。更重要的是,表单系统只创建一个特定类型的对象。因此,如果您计划有两个不同的这种类型的实例,每个实例都有不同的 data_class,那么它根本不起作用。
-
@MohammadZareMoghadam:它总是返回
'TestFormType',因为configureOptions在buildForm之前运行