我在FORMTYPE中添加了一个eventlistener,以适应用户的表单。 表单确实按照我的意图进行了调整和显示,但是当我提交表单时,我收到了以下错误:
FatalErrorException:错误:在/Applications/MAMP/htdocs/Symfony/src/Site/BlogBundle/Form/ArticleType.php第47行中的数组上调用成员函数getAuthor()
我确实使用了我的ArticleType中的getAuthor()函数来确保当前用户是表单显示的文章的作者。
这是我的ArticleTYPE
class Article extends AbstractType
{
// I PASS VARIABLE $userId FROM CONTROLLER THROUGH createForm()
private $userId;
public function __construct($userId)
{
$this->userId = $userId;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->remove('ArticlePhrases')
->remove('articletags');
$dynamicFieldCreatorFunc = function (FormEvent $event)
{
$data = $event->getData();
$form = $event->getForm();
// ADAPT THE FORM REGARDING CURRENT USER
if($this->userId == $data->getAuthor()->getId()) // LINE 47
{
$form->add('statut')
}
};
$builder->addEventListener(FormEvents::PRE_SET_DATA, $dynamicFieldCreatorFunc);
$builder->addEventListener(FormEvents::PRE_SUBMIT, $dynamicFieldCreatorFunc);
}
(...)
}
这是我的控制器(absract)
$userId= $this->getUser()->getId();
$form_article = $this->createForm(new ArticleType($userId), $articles);
答案 0 :(得分:0)
在PRE_SET_DATA上,$ event-> getData()返回绑定到表单的默认对象。 在PRE_SUBMIT事件中,$ event-> getData()返回提交数据的数组。
您可以添加" if"声明,例如:
if(is_array($data) && $data['author']==$this->userId){ $form->add('statut'); }