表单提交是否与eventlistener一起使用?

时间:2015-02-25 14:39:07

标签: forms symfony events

我在FORMTYPE中添加了一个eventlistener,以适应用户的表单。 表单确实按照我的意图进行了调整和显示,但是当我提交表单时,我收到了以下错误:

FatalErrorException:错误:在/Applications/MAMP/htdocs/Symfony/src/Site/BlogBu​​ndle/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);

1 个答案:

答案 0 :(得分:0)

在PRE_SET_DATA上,$ event-> getData()返回绑定到表单的默认对象。 在PRE_SUBMIT事件中,$ event-> getData()返回提交数据的数组。

您可以添加" if"声明,例如:

if(is_array($data) && $data['author']==$this->userId){ $form->add('statut'); }