7

doctrine2 ODMエンティティクラスからZend2フォームにデータをバインドするより良い方法はありbind()ますか?

もしそうなら、それは何でしょうか?データを配列として取得し、個々のフィールドを渡すだけでよいでしょうか?私はこれに苦労していて、おそらくそれを必要以上に難しくしています。

関数を呼び出すとbind()、デフォルトのハイドレーターを参照するZendエラーが出力されます。エンティティクラスで何か特別なことをする必要がありますか?

編集:Zendがスローしている正確なエラーは次のとおりです

〜\ vendor \ zendframework \ zendframework \ library \ Zend \ Stdlib \ Hydrator \ ArraySerializable.php:35

Zend \ Stdlib \ Hydrator \ ArraySerializable :: extractは、提供されたオブジェクトがgetArrayCopy()を実装することを期待しています

彼らは私に次のいずれかが必要だと思わせます:

  1. Zendsハイドレーター(実装方法を調査する必要があります)を使用するか、
  2. doctrine2のハイドレーターを使用します(これは、実装するための最良の方法も理解する必要があります)
4

5 に答える 5

14

Zend\Form がエンティティをハイドレートできるようにするには、エンティティ クラスに次のようなものが必要です。

public function getArrayCopy()
{
    return get_object_vars($this);
}
于 2013-03-22T00:00:08.250 に答える
2

.../Model/XXXXTable.php
で、レコードを取得したい関数を定義します。

    $id = (int)$id;
    $row = $this->tableGateway->select(array('id'=>$id));
    $row = $row->current();    //this line is very important
于 2013-09-04T05:46:53.040 に答える
2

doctrine hydrator を使用するために、module.config.php で次のコードを使用します。

$form = new ...;
$dm = $sm->get('doctrine.documentmanager.odm_default');
$form->setHydrator(new \DoctrineModule\Stdlib\Hydrator\DoctrineObject($dm));
return $form;
于 2014-06-26T07:37:31.537 に答える
1

エンティティクラスでpopulateメソッドを使用しています。このようなもの

  public function populate($data = array())
    {
        $this->id = ( isset($data['id'])) ? $data['id'] : null;
        $this->username = (isset($data['username'])) ? $data['username'] : null;
        $this->pass = (isset($data['pass'])) ? $data['pass'] : null;               

    }

次に、コントローラーで、次のような入力機能を使用できます。

$user = new User();
$request = $this->getRequest();
$user->populate($request->getPost());

あなたの質問を正しく理解しているかどうかはわかりません。

于 2012-10-24T14:43:34.367 に答える
1

幸いなことに、このチュートリアルに従えば、エンティティにこれ以上何も必要ありません。

http://samminds.com/2012/07/a-blog-application-part-1-working-with-doctrine-2-in-zend-framework-2/私はほぼ同じアプローチを使用しており、(ほぼ)うまく機能しています。あなたが気にする必要がある2つのこと:

1.) 検証済みのフィールドのみが DB に送信されるため、テーブル内のすべてのデータ (または少なくとも null 以外のデータ) を検証してください。このブログを書いている方に言われました。:)

2.) 編集フォームのビューを作成するときに、ID をルートに追加します。

$form->setAttribute('action', $this->url('post',
                    array('action'=>'add', 'id'=>"$this->id")))->prepare();

幸運を!

于 2012-10-30T08:30:50.653 に答える