2012年3月18日日曜日

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

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

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

AbstractTypeを継承したクラスで

public function getDefaultOptions(array $options)
 {
    return array(
        'data_class' => 'Acme\TaskBundle\Entity\Category',
    );
 }
とするか、

formインスタンスを作成する時に、
use Acme\TaskBundle\Form\Type\TaskType;

public function newAction()
{
    $task = new Task(); // Task Entityのインスタンスを作成
    $form = $this->createForm(new TaskType(), $task); // それを第二引数でわたす

    // ...
}
とするかです。


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


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

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


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

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



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

0 コメント:

コメントを投稿

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More