2016-06-08 3 views
1

Я использую Sonata Admin Bundle в своем проекте Symfony2. В одной форме у меня есть список выбора, содержащий два элемента: «статья» и «событие», а также поле даты, которое имеет значение только в том случае, если в списке выбрано «событие».Sonata Admin Bundle: включить поле динамически

Как я могу отключить/включить в соответствии с тем, какое значение в списке выбрано?

Вот мой соответствующий код:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('title', null, array(
      'label' => 'Titre', 
     )) 
     ->add('type', 'choice', array('choices' => array('0' => 'Article', '1' => 'Evénement',))) 
     ->add('gameDate', null, array('required' => false)); 
} 

Спасибо за вашу помощь.

+0

Вы пробовали с помощью прослушивателя событий, как [здесь] (http://stackoverflow.com/questions/26246192/correct-way-to-use-formevents-to-customise-fields-in-sonataadmin)? – greg0ire

+0

Я думаю, что это именно то, что я ищу, спасибо greg0ire. – Plems

+0

Считаете ли вы, что сделать PR для документирования этого в статье поваренной книги? – greg0ire

ответ

0

просто сэкономить немного прокрутки, вот соответствующий раздел из дока:

13.1.5. SONATA \ ADMINBUNDLE \ FORM \ TYPE \ CHOICEFIELDMASKTYPE Согласно выбору, отображаются только связанные поля. Другие поля скрыты.

<?php 
// src/AppBundle/Admin/AppMenuAdmin.php 

use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Admin\AbstractAdmin; 
use Sonata\AdminBundle\Form\Type\ChoiceFieldMaskType; 
use Symfony\Component\Form\Extension\Core\Type\TextType; 

class AppMenuAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('linkType', ChoiceFieldMaskType::class, [ 
       'choices' => [ 
        'uri' => 'uri', 
        'route' => 'route', 
       ], 
       'map' => [ 
        'route' => ['route', 'parameters'], 
        'uri' => ['uri'], 
       ], 
       'placeholder' => 'Choose an option', 
       'required' => false 
      ]) 
      ->add('route', TextType::class) 
      ->add('uri', TextType::class) 
      ->add('parameters') 
     ; 
    } 
}