我收到错误“调用非对象上的成员函数 getAgent()”。
这是我在 AgentsType.php 中的代码:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('agents', 'entity', array(
'class' => 'MyBundle:agents',
'property' => 'name',));
$formModifier = function(FormInterface $form, agents $agent) {
$description = $agent->getDescription();
$form->add('description', 'text');
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function(FormEvent $event) use ($formModifier) {
$data = $event->getData(); //ERROR HERE, returns NULL
$formModifier($event->getForm(), $data->getAgent()); // Exception HERE
}
);
$builder->get('agents')->addEventListener(
FormEvents::POST_SUBMIT,
function(FormEvent $event) use ($formModifier) {
$agent = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $agent);
}
);
}
$event->getData(); 是 NULL,我 var_dumped $event 并且它是一个非常大量的对象。
目的是在选择字段(在本例中为描述字段)中选择代理实体后动态生成表单。
谁能建议我如何处理此错误或为什么 getData() = NULL?
编辑:
这样做的主要目的是用户可以添加/禁用/更新代理。主要思想是只显示一个选择或下拉字段和一个“添加代理”按钮。如果用户从选择字段中选择一个名称,则代理实体的表单将填充其数据。这就是有一个 EventListener 的原因,它可以检测选择字段中的任何选择,然后根据用户选择显示数据。希望这能澄清一点目标。