0

zendのフォーム要素にデコレータを追加すると、検証メッセージに理由が表示されません。

コード例:

$this->addElement('Text', 'Last_Name',array(
        //'decorators' => $this->elementDecoratorsTr,
        'label' => 'Last Name:',
        'required' => false,
        'filters' => array('StringTrim'),
            'validators' => array(array('validator' => 'StringLength','validator' => 'Alpha')) 
        ));
4

2 に答える 2

1

Zend_Form_Elementソースコードは次のとおりです。

$decorators = $this->getDecorators();
if (empty($decorators)) {
    $this->addDecorator('ViewHelper')
        ->addDecorator('Errors')   // notice Errors decorator
        ->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
        ->addDecorator('HtmlTag', array('tag' => 'dd', 
                                        'id'  => $this->getName() . '-element'))
        ->addDecorator('Label', array('tag' => 'dt'));
}

独自のデコレータを設定した場合、デフォルトのデコレータはロードされません。

検証メッセージを表示するには、設定したErrorsデコレータの中にデコレータが必要です。

于 2012-08-29T12:33:06.337 に答える
0

エラーメッセージのデコレータを設定する例を次に示します。

に要素があります:

$title = $this->createElement('text', 'title');
    $title->setRequired(true)
        ->setLabel('Title:')
        ->setDecorators(FormDecorators::$simpleElementDecorators)
        ->setAttrib('maxlength', $validationConfig->form->title->maxlength)
        ->addValidator('stringLength', false, array($validationConfig->form->title->minlength,
                $validationConfig->form->title->maxlength,
                'encoding' => 'UTF-8',
                'messages' => array(
                    Zend_Validate_StringLength::INVALID =>
                    'Title must be between %min% and %max% characters',
                    Zend_Validate_StringLength::TOO_LONG =>
                    'Title cannot contain more than %max% characters',
                    Zend_Validate_StringLength::TOO_SHORT =>
                    'Title must contain more than %min% characters')));                     
    $this->addElement($title);

これはフォームデコレータを使用したクラスです。そこで多くのことを実行できます。

 class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }
于 2012-08-29T13:50:53.183 に答える