Я новичок в рамке Zend. Я использую настраиваемые валидаторы для проверки файла изображения, но я получаю эту ошибку.Пользовательский валидатор в zend framework 2
Zend\Validator\ValidatorPluginManager::get was unable to fetch or create an instance for ImageValidator
Вот файл проверки:
namespace User\Validator;
//use User\Validator\FileValidatorInterface;
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 ImageValidator 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)
{
//validation code
}
}
и здесь форма файла:
namespace User\Form;
use Zend\Form\Form;
use Zend\InputFilter\InputFilter;
use Zend\Session\Container;
use User\Validator\ImageValidator;
class PlatFormForm extends Form
{
public function __construct()
{
parent::__construct('platform-form');
$this->addInputFilter();
$this->setAttribute('method', 'post');
$this->setAttribute('enctype','multipart/form-data');
$this->setAttribute('class', 'platform_popup');
$this->addElements();
}
private function addElements()
{
$this->add([
'type' => 'file',
'name' => 'input_thumb',
'attributes' => [
'id' => 'input_thumb', 'class' => 'upload'
]
]);
$this->add([
'type' => 'submit',
'name' => 'submit',
'attributes' => [
'id' => 'add_platform', 'class' => 'upload'
],
'options' => [
'label' => 'CREATE',
//'label_attributes' => [
//],
],
]);
}
private function addInputFilter()
{
$inputFilter = new InputFilter();
$this->setInputFilter($inputFilter);
$inputFilter->add([
'name' => 'input_thumb',
'required' => true,
'filters' => [
['name' => 'StringTrim'],
['name' => 'StripTags'],
],
'validators' => [
[
'name' => 'ImageValidator',
'options' => [
'minSize' => '64',
'maxSize' => '1024',
'newFileName' => 'newFileName2',
'uploadPath' => './data/'
],
],
],
]
);
}
}
и вот module.config.php код файла:
'validators' => array(
'invokables' => array(
'ImageValidator' => 'User\Validator\ImageValidator'
),
),
Может ли кто-нибудь предложить мне, что я делаю неправильно?
:) Спасибо за ответ. Можете ли вы предложить мне, как получить новое имя загруженного файла в действии контроллера? Я использую правило проверки, как .. 'валидаторы' => [ \t \t \t [ \t \t \t \t 'имя' => '\ User \ Validator \ ImageValidator', \t \t \t \t 'опции' => [ \t \t \t \t \t 'MinSize' => '1', \t \t \t \t \t 'MaxSize' => '1 024', \t \t \t \t \t 'newFileName' => time(). 'newFileName2', \t \t \t \t \t 'uploadPath' => getcwd(). '/ Государственные/загрузки/Платформа /' \t \t \t \t], \t \t \t], \t \t \t \t \t \t], и он работает правильно, но я понятия не имею, к тому, как получить имя файла или ошибки в действия контроллера. – anil
@anil Добро пожаловать. Это следует рассматривать как новый вопрос. Я предлагаю вам принять мой ответ и задать новый вопрос в StackOverflow, если вы не можете найти существующий, который имеет дело с этой проблемой переименования. Вы также можете проверить документы, на которые я ссылаюсь в другом связанном ответе [здесь] (http: // stackoverflow.com/a/37469717/1697459). – Wilt