仅为新对象创建字段

时间:2012-08-22 21:56:01

标签: forms symfony doctrine-orm symfony-sonata

有一些字段的表单:

protected function configureFormFields(FormMapper $formMapper)
{
    $isNew = !$this->getRequest()->get($this->getIdParameter());

    $formMapper
        ->add('title')
        ->add('file', 'file', array('required' => $isNew))
    ;
}

是否有更好的方法只为新对象创建字段?

4 个答案:

答案 0 :(得分:2)

就我们而言,我们的做法与原帖相同,但我们很高兴知道有一个更清洁的解决方案:)

事件订阅者看起来太复杂,无法满足这么小的需求。

祝你好运, 克里斯托夫

答案 1 :(得分:0)

我认为更好的方法是将一个事件订阅者添加到表单类,您可以在此处查看示例:

http://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html

谢谢;)

答案 2 :(得分:0)

您可以使用Sonata isNew()函数found here from the docs

protected function configureFormFields(FormMapper $formMapper)
{
    $isNew = $this->getSubject()->isNew();

    $formMapper
        ->add('title')
        ->add('file', 'file', array('required' => $isNew))
    ;
}

然而,$this->getSubject()没有返回正确的内容存在一些问题。有a pull request open to fix these problems(我已将我的评论链接到有关如何在当前状态下使用分支的说明。)

答案 3 :(得分:0)

使用此:

$isNew = $this->getSubject()->isNew();

引发错误:

Attempted to call an undefined method named "isNew" of class "SomeEntity".

所以我改用了这个:

if ($this->getSubject()->getId() === null) {
    $isNew = true;      
} else {
    $isNew = false;
}

我希望它可以帮助将来遇到相同问题的任何人。