2012年3月18日日曜日

FormでEntityにないフィールドを使用する場合

Symfony2のフォームフレームワークでは、EntityとForm定義を結びつけることができます。

その方法は、http://symfony.com/doc/current/book/forms.htmlとかを見てもらえば分かるのですが、

AbstractTypeを継承したクラスで

  1. public function getDefaultOptions(array $options)  
  2.  {  
  3.     return array(  
  4.         'data_class' => 'Acme\TaskBundle\Entity\Category',  
  5.     );  
  6.  }  
とするか、

formインスタンスを作成する時に、
  1. use Acme\TaskBundle\Form\Type\TaskType;  
  2.   
  3. public function newAction()  
  4. {  
  5.     $task = new Task(); // Task Entityのインスタンスを作成  
  6.     $form = $this->createForm(new TaskType(), $task); // それを第二引数でわたす  
  7.   
  8.     // ...  
  9. }  
とするかです。


このようにすると、Entityにデータをbindすることができるのですが、Entiryに存在しないフィールド名をフォームに定義してしまうと、エラーが出る。
例えば、TaskEntiryに urlというパラメータが存在しないのに、formで $builder->add('url','text') のように定義してしまうと、TaskEntityにはgetUrlってメソッドが無いよ!!と、怒られるわけです。


この場合は、以下のようにすればOK

  1. $builder->add('url','text'  
  2.     array(  
  3.         "property_path" => false,  
  4.     )  
  5. );  
property_pathというパラメータにfalseを与えるだけ。


ちなみに、bindRequestした場合は、
  1. $form->bindRequest($request);  
  2. $url = $form['url']->getData();  

こんな感じでパラメータを取得できます。



ただ、一つの方法ってだけで、このソリューションを使いまくるのは、それはそれでぐちゃぐちゃになりそうなので、あくまで一つの解決策ってかんじですね。

0 コメント:

コメントを投稿

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More