Neden varsayılan doğrulama hata mesajı geçersiz kılamaz?

3 Cevap php

I-Zend_Validate to validate some form input (Zend Framework version is 1.8.2). For some reason, using the Zend_Filter_Input interface as described here çalışmaz kullanıyorum:

$data = $_POST;
$filters = array('*' => array('StringTrim'));
$validators = array('driverName' => array('NotEmpty','messages' => 'This should override the default message but does not!'));
$inputFilter = new Zend_Filter_Input($filters,$validators,$data);
$messages = $inputFilter->getMessages();
debug($messages); //show me the variable contents

Çıktı debug($messages):

Array
(
    [driverName] => Array
        (
            [isEmpty] => You must give a non-empty value for field 'driverName'
        )

)

Ne olursa olsun ben ne, ben bu mesajı geçersiz kılamaz. Ben doğrudan onaylayıcıyı kullanıyorsanız, yani:

$notEmpty = new Zend_Validate_NotEmpty();      
$notEmpty->setMessage('This WILL override the default validation error message');
if (!$notEmpty->isValid($_POST['driverName'])) {
    $messages = $notEmpty->getMessages();
    debug($messages);
}

Çıktı debug($messages):

Array
(
    [isEmpty] => Please enter your name
)

Alt satır. Ben işe doğrulayıcılar alabilirsiniz, ancak doğrulama Zend_Filter_Input arabirim yöntemi faydaları olmadan ben de kendi doğrulama sınıfı yazabilir!

Herkes bu neden oluyor gibi bir ipucu var mı ve nasıl düzeltebilirim?

Bu bir hata olabilir mi?

3 Cevap

Validator Dizideki messages tuşu tuşu sürekli doğrulama iletisi ve değer, özel hata mesajı anahtar / değer çiftleri, bir dizi geçmiş olması gerekir. İşte bir örnek:

	$validators = array(

		'excerpt' => array(
			'allowEmpty' => true,
			array('StringLength', 0, Ctrl::getOption('blog/excerpt/length')), 
			'messages' => array(Zend_Validate_StringLength::TOO_LONG => 'The post excerpt must not exceed '.Ctrl::getOption('blog/excerpt/length').' characters.')
		),

	);

Ancak, durumda, aldığınız hata iletisi Zend_Filter_Input ve allowEmpty meta komuta geliyor. Bu gerçekten bir standart validator değildir. Öyle gibi ayarlayabilirsiniz:

$options = array(
    'notEmptyMessage' => "A non-empty value is required for field '%field%'"
);

$input = new Zend_Filter_Input($filters, $validators, $data, $options);

// alternative method:

$input = new Zend_Filter_Input($filters, $validators, $data);
$input->setOptions($options);

Eğer alan başına farklı bir boş değil mesajı gerekiyorsa, ben allowEmpty => true ayarı ve özel bir mesaj ile bir NotEmpty doğrulayıcı ekleyerek tavsiye ederim.

Başvuru için, NotEmpty onaylayıcısı için doğru mesaj tuşu Zend_Validate_NotEmpty::IS_EMPTY olduğunu

MESAJLAR argümanı bir dizi değil, bir dize alır. Bu deneyin:

$validators = array('driverName' => 
                     array('NotEmpty',
                           'messages' => array(
                                0 => 'This should override the default message but does not!'
                            )
                     )
              );

Bu Zend Framework JIRA içinde var, bir hata var ...