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,
- )
- );
ちなみに、bindRequestした場合は、
- $form->bindRequest($request);
- $url = $form['url']->getData();
こんな感じでパラメータを取得できます。
ただ、一つの方法ってだけで、このソリューションを使いまくるのは、それはそれでぐちゃぐちゃになりそうなので、あくまで一つの解決策ってかんじですね。
0 コメント:
コメントを投稿