Symfony 3 - Sonata Admin Bundle - configureFormFields在从其他实体添加时禁用字段

时间:2017-02-06 12:27:56

标签: php symfony sonata-admin sonata

我有2个实体。 公司和商店。

当我添加公司时,我也可以添加商店。 我的问题是,当在公司实体上添加这个时,我不想看到该领域的公司'在表格上。

'公司'只有当我直接在商店添加'添加商店时才会显示字段。

在公司实体上添加商店时,是否可以删除或禁用此字段?

非常感谢。

更新

这是我的ClientAdmin.php

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', null, array(
            'label' => 'Name'
        ))
        ->add('email', 'email', array(
            'label' => 'E-Mail'
        ))
        ->add('street', null, array(
            'label' => 'Straße'
        ))
        ->add('streetno', null, array(
            'label' => 'Haus Nr.'
        ))
        ->add('city', null, array(
            'label' => 'Ort'
        ))
        ->add('zip', null, array(
            'label' => 'PLZ'
        ))
        ->add('stores', 'sonata_type_model', array(
            'multiple' => true,
            'by_reference' => false,
            'class' => 'StoreBundle\Entity\Store',
            'label' => 'Filialen',
        ))
    ;
}

这是我的StoreAdmin.php

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', null, array(
            'label' => 'Name',
        ))
        ->add('number', null, array(
            'label' => 'Nummer',
        ))
        ->add('street', null, array(
            'label' => 'Straße',
        ))
        ->add('streetno', null, array(
            'label' => 'Haus Nr.',
        ))
        ->add('zip', null, array(
            'label' => 'PLZ',
        ))
        ->add('city', null, array(
            'label' => 'Stadt',
        ))
        ->add('email', null, array(
            'label' => 'E-Mail',
            'required' => false,
        ))
        ->add('client', 'sonata_type_model', array(
            'required' => false,
            'multiple' => false,
            'by_reference' => false,
            'class' => 'ifabrik\ClientBundle\Entity\Client',
            'label' => 'Unternehmen',
        ))
        ->add('editor', 'sonata_type_model', array(
            'required' => false,
            'multiple' => false,
            'by_reference' => false,
            'class' => 'UserBundle\Entity\User',
            'label' => 'Bearbeiter',
        ))
    ;
}

1 个答案:

答案 0 :(得分:0)

好的,在你的storeAdmin中,你可以检查你是否已经拥有一个客户端,以便呈现客户端字段。

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

    $formMapper
        ->add('name', null, array(
            'label' => 'Name',
        ))
        ->add('number', null, array(
            'label' => 'Nummer',
        ))
        ->add('street', null, array(
            'label' => 'Straße',
        ))
        ->add('streetno', null, array(
            'label' => 'Haus Nr.',
        ))
        ->add('zip', null, array(
            'label' => 'PLZ',
        ))
        ->add('city', null, array(
            'label' => 'Stadt',
        ))
        ->add('email', null, array(
            'label' => 'E-Mail',
            'required' => false,
        ));
    if ($isNew) {
       $formMapper
        ->add('client', 'sonata_type_model', array(
            'required' => false,
            'multiple' => false,
            'by_reference' => false,
            'class' => 'ifabrik\ClientBundle\Entity\Client',
            'label' => 'Unternehmen',
        ));
    }
     $formMapper
        ->add('editor', 'sonata_type_model', array(
            'required' => false,
            'multiple' => false,
            'by_reference' => false,
            'class' => 'UserBundle\Entity\User',
            'label' => 'Bearbeiter',
        ))
    ;
}