Symfony2のフォームフレームワークでは、EntityとForm定義を結びつけることができます。
その方法は、http://symfony.com/doc/current/book/forms.htmlとかを見てもらえば分かるのですが、
AbstractTypeを継承したクラスで
formインスタンスを作成する時に、
このようにすると、Entityにデータをbindすることができるのですが、Entiryに存在しないフィールド名をフォームに定義してしまうと、エラーが出る。
例えば、TaskEntiryに urlというパラメータが存在しないのに、formで $builder->add('url','text') のように定義してしまうと、TaskEntityにはgetUrlってメソッドが無いよ!!と、怒られるわけです。
この場合は、以下のようにすればOK
ちなみに、bindRequestした場合は、
こんな感じでパラメータを取得できます。
ただ、一つの方法ってだけで、このソリューションを使いまくるのは、それはそれでぐちゃぐちゃになりそうなので、あくまで一つの解決策ってかんじですね。
その方法は、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();
こんな感じでパラメータを取得できます。
ただ、一つの方法ってだけで、このソリューションを使いまくるのは、それはそれでぐちゃぐちゃになりそうなので、あくまで一つの解決策ってかんじですね。


