2017-11-16 7 views
1

私は私が持っているソナタと管理フォームでは私の形 に隠されたとして実体フィールドを追加する必要があります。SonataAdminでフォームに隠れているエンティティであるフィールドを作成する方法は?

inpect field in html

(検査画像を参照)

実際
protected function configureFormFields(FormMapper $formMapper) 
    {  
     if ($this->getRoot()->getSubject()->getId()) { 
      $formMapper 
       ->add('driverNight', 'hidden', array(), array('admin_code' => 'cab.admin.driver')) 
      ->add('monday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Monday', 'value' => '0')) 
      ->add('tuesday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Tuesday', 'value' => '0')) 
      ->add('wednesday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Wednesday', 'value' => '0')) 
      ->add('thursday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Thursday', 'value' => '0')) 
      ->add('friday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Friday', 'value' => '0')) 
      ->add('saturday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Saturday', 'value' => '0')) 
      ->add('sunday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Sunday', 'value' => '0')) 

} 

、入力中に無価値

driverNightフィールドをタイプエンティティであることを知らないようにするにはどうすればよいですか?ここで説明するよう

答えて

0

あなたは、データ変換器を使用することができます。data transformer

私はあなたがモデル層とにintからentityにビュー層にintentityを変換し、反転トランスクラスを作成することを示唆しています設定フォームでaddModelTransformerメソッドを使用してください。

  1. Symfony\Component\Form\DataTransformerInterfaceを実装し、2つの方法transformreverseTransformを含むモデルのトランスクラスを作成します。このクラスは、2つの引数を渡すことで構築できます。エンティティマネージャとintに変換されるユーザエンティティオブジェクト。

class DriverToIntTransformer implements DataTransformerInterface { 
private $manager; 
private $driver; 

public function __construct(ObjectManager $manager, $oUser) 
{ 
    $this->manager = $manager; 
    $this->driver = $oUser; 
} 
public function transform($user) 
{ 
    if (null === $user) { 
     return $this->driver->getId(); 
    } 
    return $user->getId(); 
} 
public function reverseTransform($driverNumber) 
{ 
    if (!$driverNumber) { 
     return; 
    } 
    $oDriver = $this->manager 
     ->getRepository('YourUserBundle:User') 
     // query for the driver with this id 
     ->find($driverNumber); 
    if (null === $oDriver) { 
     throw new TransformationFailedException(sprintf(
      'An user with number "%s" does not exist!', 
      $driverNumber 
     )); 
    } 
    return $oDriver; 
} 

2コール変換方法:

if ($this->getRoot()->getSubject()->getId()) { 
     $driver = $this->getRoot()->getSubject()->getId(); 
$em = $this->container->get('doctrine.orm.entity_manager'); 
     $oDriver = $em->getRepository('YourUserBundle:User')->find($driver); 
     $formMapper 
      ->add('driverNight', 'hidden', array(), array('admin_code' => 'cab.admin.driver')); 
     $formBuilder = $formMapper->getFormBuilder(); 
     $formBuilder->get('driverNight')->addModelTransformer(new DriverToIntTransformer($em, $oDriver)); 



    $formMapper 
     ->add('monday', 'checkbox', array('required' => false, "attr" => array('class' => 'checkbox-day'), 'label' => 'Monday', 'value' => '0'));//..... 
} 
+0

おかげで、それは私が必要なものを正確にです。 – sgmc

関連する問題