2016-10-06 4 views
-1

抽象検証ツールについて質問があります。私はMb Rostami found hereのソリューションを実装しようとしていました。ValidatorPluginManager getがモデル入力フィルタでジョブを実行できない

これは私が取得エラーです:

のZend \バリ\ ValidatorPluginManager :: getがアプリケーション\バリ\ファイル\イメージ

のために、私は必要なすべてのインスタンスを取得または作成することができませんでした私は何とかクラスにモデルを挿入すると思います。 Application\Validators\File\Imageとは何ですか?

このエラーを解決するにはどうすればよいですか?最も簡単な解決策は、モジュールに呼び出し可能なバリデータークラスを追加することでしょうか?

モデルクラス内の入力フィルタ:

public function getInputFilter() 
{ 
    if (!$this->inputFilter) { 
     $inputFilter = new InputFilter(); 

     $inputFilter->add(array(
      'name' => 'eid', 
      'required' => true, 
      'filters' => array(
       array('name' => 'Int'), 
      ) 
     )); 

     $newFileName = sha1(time(), true); 
     $inputFilter->add(
      array(
       'name' => 'ImageValidator', 
       'required' => true, 
       'validators' => array(
        array(
         'name' => '\Application\Validators\File\Image', 
         'options' => array(
          'minSize' => '64', 
          'maxSize' => '5120', 
          'newFileName' => $newFileName, 
          'uploadPath' => './data/' 
         ), 
        ), 

       ) 
      ) 
     ); 

     $this->inputFilter = $inputFilter; 
    } 

    return $this->inputFilter; 
} 

Validatorクラス:

<?php 

namespace Application\Validators\File; 

use Zend\Validator\File\Extension; 
use Zend\File\Transfer\Adapter\Http; 
use Zend\Validator\File\FilesSize; 
use Zend\Filter\File\Rename; 
use Zend\Validator\File\MimeType; 
use Zend\Validator\AbstractValidator; 

class Image extends AbstractValidator 
{ 
const FILE_EXTENSION_ERROR = 'invalidFileExtention'; 
const FILE_NAME_ERROR = 'invalidFileName'; 
const FILE_INVALID = 'invalidFile'; 
const FALSE_EXTENSION = 'fileExtensionFalse'; 
const NOT_FOUND = 'fileExtensionNotFound'; 
const TOO_BIG = 'fileFilesSizeTooBig'; 
const TOO_SMALL = 'fileFilesSizeTooSmall'; 
const NOT_READABLE = 'fileFilesSizeNotReadable'; 


public $minSize = 64; //KB 
public $maxSize = 1024; //KB 
public $overwrite = true; 
public $newFileName = null; 
public $uploadPath = './data/'; 
public $extensions = array('jpg', 'png', 'gif', 'jpeg'); 
public $mimeTypes = array(
    'image/gif', 
    'image/jpg', 
    'image/png', 
); 

protected $messageTemplates = array(
    self::FILE_EXTENSION_ERROR => "File extension is not correct", 
    self::FILE_NAME_ERROR => "File name is not correct", 
    self::FILE_INVALID => "File is not valid", 
    self::FALSE_EXTENSION => "File has an incorrect extension", 
    self::NOT_FOUND => "File is not readable or does not exist", 
    self::TOO_BIG => "All files in sum should have a maximum size of '%max%' but '%size%' were detected", 
    self::TOO_SMALL => "All files in sum should have a minimum size of '%min%' but '%size%' were detected", 
    self::NOT_READABLE => "One or more files can not be read", 
); 

protected $fileAdapter; 

protected $validators; 

protected $filters; 

public function __construct($options) 
{ 
    $this->fileAdapter = new Http(); 
    parent::__construct($options); 
} 

public function isValid($fileInput) 
{ 
    $options = $this->getOptions(); 
    $extensions = $this->extensions; 
    $minSize = $this->minSize; 
    $maxSize = $this->maxSize; 
    $newFileName = $this->newFileName; 
    $uploadPath = $this->uploadPath; 
    $overwrite = $this->overwrite; 
    if (array_key_exists('extensions', $options)) { 
     $extensions = $options['extensions']; 
    } 
    if (array_key_exists('minSize', $options)) { 
     $minSize = $options['minSize']; 
    } 
    if (array_key_exists('maxSize', $options)) { 
     $maxSize = $options['maxSize']; 
    } 
    if (array_key_exists('newFileName', $options)) { 
     $newFileName = $options['newFileName']; 
    } 
    if (array_key_exists('uploadPath', $options)) { 
     $uploadPath = $options['uploadPath']; 
    } 
    if (array_key_exists('overwrite', $options)) { 
     $overwrite = $options['overwrite']; 
    } 
    $fileName = $fileInput['name']; 
    $fileSizeOptions = null; 
    if ($minSize) { 
     $fileSizeOptions['min'] = $minSize * 1024; 
    } 
    if ($maxSize) { 
     $fileSizeOptions['max'] = $maxSize * 1024; 
    } 
    if ($fileSizeOptions) { 
     $this->validators[] = new FilesSize($fileSizeOptions); 
    } 
    $this->validators[] = new Extension(array('extension' => $extensions)); 
    if (!preg_match('/^[a-z0-9-_]+[a-z0-9-_\.]+$/i', $fileName)) { 
     $this->error(self::FILE_NAME_ERROR); 
     return false; 
    } 

    $extension = pathinfo($fileName, PATHINFO_EXTENSION); 
    if (!in_array($extension, $extensions)) { 
     $this->error(self::FILE_EXTENSION_ERROR); 
     return false; 
    } 
    if ($newFileName) { 
     $destination = $newFileName . ".$extension"; 
     if (!preg_match('/^[a-z0-9-_]+[a-z0-9-_\.]+$/i', $destination)) { 
      $this->error(self::FILE_NAME_ERROR); 
      return false; 
     } 
    } else { 
     $destination = $fileName; 
    } 
    $renameOptions['target'] = $uploadPath . $destination; 
    $renameOptions['overwrite'] = $overwrite; 
    $this->filters[] = new Rename($renameOptions); 
    $this->fileAdapter->setFilters($this->filters); 
    $this->fileAdapter->setValidators($this->validators); 
    if ($this->fileAdapter->isValid()) { 
     $this->fileAdapter->receive(); 
     return true; 
    } else { 
     $messages = $this->fileAdapter->getMessages(); 
     if ($messages) { 
      $this->setMessages($messages); 
      foreach ($messages as $key => $value) { 
       $this->error($key); 
      } 
     } else { 
      $this->error(self::FILE_INVALID); 
     } 
     return false; 
    } 
} 
} 
+0

修正済み:明らかに、フォルダ構造が正しく使用されていません。このファイルは、ファイルシステムの\ module \ Application \ src \ Application \ Validators \ Fileにあります。 – Floris

+0

こんにちはフロリス。 [これは共同編集されたサイト](https://stackoverflow.com/help/editing)であることに注意してください。そういうわけで、ユーザーは何が言われたのかの意味を変えない限り、良い編集を続けることを喜んで頼みます。ありがとう! – halfer

+0

質問に対する回答がある場合は、以下の拡張回答を追加することを検討しますか? – halfer

答えて

0

ソリューションは、少なくとも私の場合には、単純なものでした。上記のように:フォルダ構造を確認してください。 Zend Frameworkはプロジェクトファイルを構造化する独自の方法を持っているので、ファイルパスは一致する必要があります。

関連する問題