2

Zend Framework 2 を使用しています。エンティティ クラス内でいくつかの検証ルールを定義しました。これらは問題なく期待どおりに機能します。

ただし、「編集」モードでは、2 つのファイル アップロード フィールドを必須にしたくありません。コントローラー アクションsetRequired(false)内の両方のファイル アップロード フィールドに対して実行しようとしましたが、検証には何の影響もないようです。「ファイルが見つかりませんでした」というメッセージがスローされます。ユーザーがファイルをアップロードせずにフォームを正常に送信できるようにするには、何が必要ですか?

どんな助けにも感謝します。

4

4 に答える 4

3

コントローラーでフォームの検証を変更するには、現在の検証を削除して、新しい検証を設定する必要があります。これがお役に立てば幸いです:

$form = new YourForm();
$form->setData ( $yourPostedData () );
$formInputFilter = $form->getInputFilter ();

// change filter
$formInputFilter->remove ( 'your_field' );
$inputFactory = new \Zend\InputFilter\Factory();
$formInputFilter->add ( $inputFactory->createInput ( array (
    'name' => 'your_field',
    'required' => false
) ) );

if ($form->isValid ()) {
    //...   
}
于 2013-11-12T06:17:10.760 に答える
0

「ファイルが見つかりませんでした」というエラー メッセージを見て、私が抱えていた問題がバリデーター/フィルターの設定よりも深刻であることに気付きました。

フォームは、FormData オブジェクトを使用して AJAX スクリプトによって処理されます。以下を使用してファイルをオブジェクトに追加しました。

oAgencyFormData.append("cssFilename", document.getElementById('logoName').files[0]);

オブジェクトは AJAX 呼び出しに渡されます。ファイルがアップロードされていない場合、「未定義」がスクリプトに渡されていることに気付きました。したがって、ファイルが指定されていない場合は、「」が割り当てられる変数に分割しました。

    var oLogoFile   =   document.getElementById('logoName').files[0];   
    var oCssFile    =   document.getElementById('cssFilename').files[0];

    // define defaults for file upload fields (used if nothing is uploaded)
    if(typeof oLogoFile === 'undefined'){
        oLogoFile = '';
    };

    if(typeof oCssFile === 'undefined'){
        oCssFile = '';
    };

これを行うと、ファイルバリデーターは期待どおりに機能しました。

于 2013-11-12T10:14:47.093 に答える