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();
こんな感じでパラメータを取得できます。
ただ、一つの方法ってだけで、このソリューションを使いまくるのは、それはそれでぐちゃぐちゃになりそうなので、あくまで一つの解決策ってかんじですね。