Php 格式化表单错误消息

Php 格式化表单错误消息,php,zend-framework2,Php,Zend Framework2,表格代码: $this->add(array( 'name' => 'username', 'type' => 'Text', 'options' => array( 'label' => 'Username', ), )); $inputFilter->add(array( 'name' => 'username', 'required' =>

表格代码:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
型号:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
查看:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
然后我得到如下输出:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>

似乎“Zend\Validator”的每个单独部分都单独工作,并单独抛出错误消息。我只想在字段为空而不是stringlength时显示所需的消息。我该怎么做

-谢谢

更新:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
我在“查看”页面中执行了以下操作:

 echo $this->formRow($form->get('username'));
 foreach($form->getMessages() as $key=>$value){
     if($key=="username"){
             if(isset($value['isEmpty'])){
                 echo $value['isEmpty'];
             }else if(isset($value['stringLengthTooShort'])){
                echo $value['stringLengthTooShort'];
             }else if(isset($value['stringLengthTooLong'])){
                echo $value['stringLengthTooLong'];
             }
     }
 }
然后得到输出:

现在无序列表中仍有两条错误消息。如何删除这些邮件并仅保留已格式化的邮件

已解决:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
我必须做到以下几点:

查看:

  $this->add(array(
     'name' => 'username',
     'type' => 'Text',
     'options' => array(
         'label' => 'Username',
     ),
 ));
    $inputFilter->add(array(
        'name' => 'username',
        'required' => true,
        'filters' => array(
            array('name' => 'StripTags'),
            array('name' => 'StringTrim'),
        ),
        'validators' => array(
            array(
                'name' => 'NotEmpty',
    'options' => array(
        'messages' => array(
            \Zend\Validator\NotEmpty::IS_EMPTY => 'Username required',
        ),
    ),
            ),                    
            array(
                'name' => 'StringLength',
                'options' => array(
                    'encoding' => 'UTF-8',
                   'min' => 5,
                    'max' => 69,
                ),
            ),             
            ),                
    ));
$form->setAttribute('action', $this->url('signup', array('action' => 'signup')));
 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('username'));
$errmsg = $form->getMessages();
echo $this->formLabel($form->get('username'));
echo $this->formInput($form->get('username'));
if ($errmsg) {
    if (isset($errmsg['username'])) {
        foreach ($errmsg['username'] as $key => $value) {
            ?>
            <span class="formerror">
                <?php
                if ($key == "isEmpty") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooShort") {
                    echo $value;
                    break;
                } else if ($key == "stringLengthTooLong") {
                    echo $value;
                    break;
                }
                ?>
            </span>
$errmsg=$form->getMessages();
echo$this->formLabel($form->get('username'));
echo$this->formInput($form->get('username');
如果($errmsg){
如果(设置($errmsg['username'])){
foreach($errmsg['username']作为$key=>$value){
?>

要格式化错误消息,我不能使用“formelementerrors”,因为它返回的是字符串(ref:),而不是数组。因此,如果我使用“getMessages()”,则可以通过键轻松识别单个错误。

在控制器中,您可以使用此方法检索错误消息:


$form->getMessages();


是一个数组,您可以使用foreach检索键“isEmpty”并显示它。

在控制器中,您可以使用此方法检索错误消息:


$form->getMessages();


是一个数组,您可以使用foreach检索键“isEmpty”并显示它。

请举例说明getmessages()如何为“用户名”排列“NoteEmpty”、“StringLength”等消息?请举例说明getmessages()如何为“用户名”排列“NoteEmpty”、“StringLength”等消息?