Forms 使新对象只需要字段

Forms 使新对象只需要字段,forms,symfony,doctrine-orm,symfony-sonata,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' => $i

表单中有一些字段:

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

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

是否有更好的方法使字段仅用于新对象?

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


谢谢;)

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


谢谢;)

在我们这方面,我们的做法与原来的帖子相同,但我们很高兴知道有一个更干净的解决方案:)

事件订阅者看起来太复杂了,无法满足如此小的需求

致以最良好的祝愿,
Christophe

在我们这方面,我们的做法与原来的帖子相同,但我们很高兴知道有一个更干净的解决方案:)

事件订阅者看起来太复杂了,无法满足如此小的需求

致以最良好的祝愿,
Christophe

您可以使用索纳塔
isNew()
功能:


但是,
$this->getSubject()
没有返回正确的内容会出现一些问题。有(我已链接到我的评论,其中包含如何在分支当前状态下使用分支的说明)。

您可以使用Sonata
isNew()
函数:

但是,
$this->getSubject()
没有返回正确的内容会出现一些问题。有(我已链接到我的评论,并说明如何在当前状态下使用分支。)

使用此:

$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;
}
我希望它能帮助将来面临同样问题的人。

使用此:

$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;
}

我希望它能帮助将来面临同样问题的人。

是的,谢谢,我也看过这个sollutuon。但正如Christophe在下面注意到的:对于这个简单的任务来说,它太复杂了。是的,谢谢你,我也看过这个sollutuon。但正如Christophe在下面所注意到的:对于这个简单的任务来说,它太复杂了。