2012-01-18 16 views
0

私のプロジェクトでは、ユーザーがファイルをアップロードするか、テキスト入力などの他の情報を指定する必要があるフォームがあります。Zend_Form_File_Elementの条件付きファイル数バリデーター

私は、フォーム要素にカウントバリデータを添付する可能性があることを知って、これは次のように機能します。

$upload->addValidator('Count', false, array('min' => 1, 'max' => 3)); 

このバリデータが呼び出される、どんなにをアップロードまたはないファイルがある場合。しかし、私がバリデーターをカスタムバージョンに置き換え、ファイルをアップロードしないと、バリデーターは呼び出されません。

Zend_File_Transfer_Adapter_AbstractのはisValid()メソッドを見て、私は問題を見ることができます:

[...] 
    foreach($check as $key => $content) { 
     if (array_key_exists('validators', $content) && 
      in_array('Zend_Validate_File_Count', $content['validators'])) { 
      $validator = $this->_validators['Zend_Validate_File_Count']; 
      $count  = $content; 
[...] 

はValidatorがここにいくつかの特別な治療を得たカウントのように思えます。しかし、Zendファイルを上書きしないで、カスタマイズされたバリデータをどのように含めることができますか?

私たちはZend_Formクラスを拡張していないので、残念ながら私は関連するFormのisValid()メソッドを上書きすることもできません。どんなアイディアが残っていますか?御時間ありがとうございます!

+0

質問がどのようなものかわからない場合、多分いくつかのコード例が役に立ちますか? – RockyFord

答えて

1

これはおそらく少しのajaxでもっとも簡単です。そうすれば、フォームを投稿する前に選択内容を評価することができます。
PHPでそれを行うには、Elementバリデーターはおそらく方法ではありません。 if()文で選択を処理する方が良いでしょう。

pseudocode... 
//if file element contains something and text doesn't 
if($this->getRequest->getPost('file'=='' && 'text' != ''){ 
    $file = $form->file->receive(); 

    //do some stuff 
//if text element contains something and file dosen't 
}elseif ($this->getRequst->getPost('file' != '' && 'text' == '') { 
    if($form->isValid($this->_request->getPost('text')) { 
     //do some stuff 
    } 
} 

これはアイデアです。役立つことを願っています。

+0

Zend Frameworkをハッキングすることなく、サーバー側を解決するのが難しいため、この問題のAJAX検証があることがわかりました。 検証が失敗したようですが、私はそれを再度有効にしなければなりませんでした。 2番目のアイデアも機能しますが、私たちはこのような素晴らしいコントローラーを持っています。私はそれを台無しにしたくないので、Optionではありません。私たちにとっての解決策は、ファイルがアップロードされることがセキュリティ上重要ではないため、サーバー側の検証なしで生きることです。 –