私の ZF2 は、inputFilters をモデルに設定し、検証中にフォームに適用するという、どこでも見たことのある単純な構造を使用しています。しかし、ここで大きな壁にぶち当たりました。あるモデルに対して検証する必要があるいくつかのフィールドと、別のモデルに対して検証する必要があるいくつかのフィールドを持つフォームの検証をどのように処理しますか?
私のシナリオ: 単一のフォームを使用して、データベースの 2 つのテーブルに 2 つのエントリを挿入しています (ユーザーを追加し、そのユーザーにリンクされた寄付を追加します)。一部のフィールドは 1 つのテーブルに配置され、その他のフィールドは 2 番目のテーブルに配置されます。
前述したように、入力フィルターはモデル レベルで保存されます。
私のシナリオ全体が1つのモデル/テーブルのみを含む場合、たとえば1つの寄付を保存し、他には何も保存しない場合、次のようになります。
$donation = new Donation();
$form->setInputFilter($donation->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$donation->exchangeArray($form->getData());
$this->getDonationTable()->saveDonation($donation);
上記のことができます。
しかし、2 つのモデルから収集している 2 つの inputFilters のセットに対してフォーム データを分析および検証しようとしています。1 つは寄付モデルに送られるデータ用で、もう 1 つはユーザーに送られるデータ用です。したがって、私は次のようなものを求めています:
$donation = new Donation();
$user = new User();
$form->setInputFilter($donation->getInputFilter());
次に、次のようなものを追加します:(明らかに存在しません)
$form->addInputFilter($user->getInputFilter());
だから私は続けることができました...
$form->setData($request->getPost());
if ($form->isValid()) {
// add donation
// add user
これについてインターネットで何も見つけられなかったことに驚いています。モデルとinputFiltersの使用方法が間違っていますか? あるモデルに対して検証する必要があるいくつかのフィールドと、別のモデルに対して検証する必要があるいくつかのフィールドを持つフォームの検証をどのように処理しますか?