Как я могу настроить сообщение об ошибке Zend_Validate_File_Upload :: INI_SIZE? - PullRequest
3 голосов
/ 07 июня 2011

Я пробовал 3 метода без изменений в сообщении об ошибке, которое выводит File 'image' exceeds the defined ini size.Я думаю, что сообщение захвачено где-то, и я не выяснил, где.Если вы сталкивались с этим, дайте мне знать, как вы решили это - высоко ценится.

Метод 1

$element->addValidator('Size', false, '1MB', array('messages' => 
    array(
        Zend_Validate_File_Size::TOO_BIG    => 'File size is invalid',
        Zend_Validate_File_Upload::INI_SIZE => 'File size is invalid'
    )));

Метод 2

$element->addErrorMessage(
    array(Zend_Validate_File_Upload::INI_SIZE => 'File size is invalid'));

Метод 3

$element->addValidator('Callback', true,
    array(
        'callback' => function($value) {
            $validator = new Zend_Validate_File_Size();
            return $validator->isValid($value);
        },
        'messages' => array(
            Zend_Validate_Callback::INVALID_VALUE => 'File size is invalid'),
));

Ответы [ 4 ]

1 голос
/ 10 сентября 2012
$data = array(
    Zend_Validate_File_Size::TOO_BIG    => 'File size is invalid',
    Zend_Validate_File_Upload::INI_SIZE => 'File size is invalid'
);

$translator = new Zend_Translate('Array', $data, 'en_US');
$translator->getAdapter()->setLocale(new Zend_Locale('en_US'));
Zend_Validate_Abstract::setDefaultTranslator($translator);
0 голосов
/ 07 марта 2014

Я нашел вышеописанные методы неудобными и хакерскими, поэтому после отладки:

$upload = new Zend_Form_Element_File('upload');

$upload->getTransferAdapter()->getValidator('Upload')->setMessage('File you are trying to upload is too big.', Zend_Validate_File_Upload::INI_SIZE);

getTransferAdapter () получает адаптер по умолчанию, которому по умолчанию назначен валидатор загрузки. Теперь нужно переопределить сообщение по умолчанию с помощью setMessage.

0 голосов
/ 28 сентября 2012

Другая возможность :

$validator = new Zend_Validate_File_Upload();
$validator->setMessages(array(
    Zend_Validate_File_Upload::INI_SIZE => 'Die Datei ist größer als die maximal erlaubte Größe der ini-Konfiguration.',
    Zend_Validate_File_Upload::NO_FILE => 'Es muss eine Datei angegeben werden',
));
$element->addValidator($validator);
0 голосов
/ 08 июня 2011

У меня может быть решение. Закачку файлов часто сложно реализовать и настроить, особенно с помощью Zend, поэтому я использовал специальный декоратор для изменения поведения и рендеринга моей формы. Таким образом, вы можете сделать все, что вы хотите в отношении сообщения об ошибке, например:

Файл примера формы:

private $fileDecorators = array(
    'File', array('ViewScript', array(
            'viewScript' => 'forms/file.phtml',
            'placement' => false)))

;

$uploadfile = new Zend_Form_Element_File('uploadfile', array(
                'disableLoadDefaultDecorators' => true,
                'decorators' => $this->fileDecorators,
                'description' => 'form_uploadfile_description',
                'label' => 'form_uploadfile_label',
                'required' => true,
                'destination' => '/tmp',
                'filters' => array(
                ),
                'validators' => array(
                    //array('StringLength', array(0, 256)),
                    array('Size', true, '1MB'),
                    array('Extension', true, 'jpg,png,gif'),
                    array('Count', true, 1)
                )
            ));
$this->addElement($uploadfile);

И содержимое файла декоратора file.phtml, где вы можете настроить рендеринг:

<?php
$type=explode('_',$this->element->getType());
$myclass = 'form_item ' . strtolower(end($type));

?>
<div class="<?php echo $myclass; ?>" id="field_<?php echo $this->element->getId(); ?>">
    <?php if (0 < strlen($this->element->getLabel())): ?>
        <?php echo $this->formLabel($this->element->getFullyQualifiedName(), $this->element->getLabel(),array('class'=>($this->element->isRequired())?' required':""));?>
    <?php endif; ?>
    <div class="float_100">
        <span class="file_wrapper">
            <?php echo $this->content; ?>
            <span class="button"><?=$this->translate('choose_an_image')?></span>
        </span>
    </div>

    <?php if (0 < strlen($this->element->getDescription())): ?>
        <div class="tooltip"><?php echo $this->element->getDescription(); ?></div>
    <?php endif; ?>

    <?php if (0 < strlen($this->element->getMessages())): ?>
        <div class="error">
        // Print your error here
        </div>
    <?php endif; ?>
</div>

Надеюсь, эта помощь

...