0

以下のコードを調べます。アップロードからファイルを取得し、それを検証したいと思います。ファイルの拡張子、サイズ、MIME をチェックします。それらを 1 つずつチェックすると正しい結果が得られますが、$adapter->setValidators() を使用すると結果は偽陽性になります。

ZF2バリデーターは奇妙な方法で動作しますか、それとも使用方法がわかりませんか?

コード

<?php    
    $data = array_merge_recursive(
        $this->getRequest()->getPost()->toArray(),          
        $this->getRequest()->getFiles()->toArray()
    );

    /* set mime on server side */
    $finfo = new \finfo(FILEINFO_MIME);             
    $mimeinfo = explode(';', $finfo->file($data['upload_image']['tmp_name']));
    $data['upload_image']['type'] = $mimeinfo[0];

    $adapter = new \Zend\File\Transfer\Adapter\Http(); 

    $validatorSize = new \Zend\Validator\File\Size(10);
    $validatorExt = new \Zend\Validator\File\Extension('gif,jpg,jpeg,png');
    $validatorMime = new \Zend\Validator\File\MimeType('image/gif,image/jpg,image/jpeg,image/png');

    $results = array();
    $results['size'] = $validatorSize->isValid($data['upload_image']);
    $results['ext'] = $validatorExt->isValid($data['upload_image']);
    $results['mime'] = $validatorMime->isValid($data['upload_image']);

    $adapter->setValidators(array(
        $validatorSize,
        $validatorExt,
        $validatorMime,
    ), $data['upload_image']);

    $results['adapter'] = $adapter->isValid();

    \Zend\Debug\Debug::dump($results);
?>

結果

array(4) {
  ["size"] => bool(false)
  ["ext"] => bool(true)
  ["mime"] => bool(false)
  ["adapter"] => bool(true)
}
4

1 に答える 1

1

質問の意味を正しく理解できたと思います:) addValidator() メソッドを使用できます。2 番目のパラメーターは $breakChainOnFailure です。このような動作は、バリデーターのチェーンに当てはまります。明示的にブレークしない場合は、各バリデータが実行されます。

于 2013-08-08T16:05:49.143 に答える