14

Zend Framework 2を使用してアプリケーションを開発しており、FormRowヘルパーを使用して、フォームにラベル、入力、およびエラー(存在する場合)をレンダリングしています。

//within the view
echo $this->formRow($form->get('Name'));

ユーザーが必要な入力テキストフィールドに入力せずにフォームを送信すると、FormRowは次のエラーメッセージを表示します。

<label>
    <span>Name: </span>
    <input class="input-error" type="text" value="" placeholder="Insert Name Here" name="Name">
</label>
<ul>
    <li>Value is required and can't be empty</li>
</ul>

liタグのクラスを設定して、後でスタイルを設定するにはどうすればよいですか?

を介してformElementErrorsを目的のクラス属性でエコーできることを知っています。

<?php echo $this->formElementErrors($form->get("Name"), array('class' => "valuerequired", 'message' => "errortestmessage")); ?>

..しかし、FormRowはクラスなしでエラーメッセージをレンダリングします。

参考までに、エンティティを次のように設定しています。

public function getInputFilter()
    {
        if (!$this->inputFilter) {
            $inputFilter = new InputFilter();

            $factory = new InputFactory();

            $inputFilter->add($factory->createInput(array(
                'name'     => 'Name',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array(
                    array(
                        'name'      => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min'      => 1,
                            'max'      => 100,
                        ),
                    ),
                ),
           )));

            $this->inputFilter = $inputFilter;
        }
        return $this->inputFilter;
    }
4

6 に答える 6

23

formElementErrorsのコードを参照してください

基本的に、次のようなことができます。

$this->formElementErrors($elem)
     ->setMessageOpenFormat('<ul%s><li class="some-class">')
     ->setMessageSeparatorString('</li><li class="some-class">');

しかし、それは非常に不便です...

より良い解決策は、Zend \ Form \ View \ Helper \ FormElementErrorsを独自のクラスで拡張してから、view-helperformElementErrorsをクラスに登録することです。つまり、基本的には次のようなものになります。

namespace Mymodule\Form\View\Helper;

use Zend\Form\View\Helper\FormElementErrors as OriginalFormElementErrors;

class FormElementErrors extends OriginalFormElementErrors  
{
    protected $messageCloseString     = '</li></ul>';
    protected $messageOpenFormat      = '<ul%s><li class="some-class">';
    protected $messageSeparatorString = '</li><li class="some-class">';
}

最後に、ビューヘルパーをこの新しいクラスに登録します。このために、ModulesModule.php内に次のコードを提供します

public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'formelementerrors' => 'Mymodule\Form\View\Helper\FormElementErrors'
        ),
    );
}

displaimer:このコードはテストされていません。エラーがあるかどうか教えてください。しかし、これはかなりうまくいくはずです。

于 2012-12-07T15:48:02.663 に答える
11

さて、私自身の問題の解決策は、以下を使用する代わりに、私の目の前にありました。

//within the view
echo $this->formRow($form->get('Name'));

フォームの各要素を個別に呼び出しました。

    //within the view
    echo $this->formLabel($form->get('Name'));
    echo $this->formInput($form->get('Name'));
    echo $this->formElementErrors($form->get("Name"), array('class' => "some_class", 'message' => "errormessage")); 

それがそれを行う最も効率的な方法であるかどうかわからない、そうでないと思うなら、plzは一線を引く。

于 2012-12-12T15:58:59.080 に答える
2

FormRowは、「form_element_errors」プラグインが登録されているかどうかを確認します。その場合は、デフォルトとしてそれを使用してエラーメッセージを表示します。

だからサムの例の仕事。標準プラグインを再定義し、MVCに通知する必要があります。

module.config.phpで実行しました

'view_helpers' => array(
'invokables' => array(
    'formElementErrors'=> 'MyModule\View\Helper\FormElementErrors',

そしてFormRowは私が望むように表示エラーを開始します:)

于 2013-08-18T09:25:12.167 に答える
1

あなたの問題として、試してみてください

変化する

//within the view
echo $this->formRow($form->get('Name'));

//within the view
echo $this->formRow($form->get('Name'),null,false);
// Note: add more 2 last parameters, false- for $renderErrors => will NOT render Errors Message. 
//Look original function in helper/formrow.php: function __invoke(ElementInterface $element = null, $labelPosition = null, $renderErrors = null, $partial = null)

エラーメッセージを関数としてレンダリングする

echo $this->formElementErrors($form->get('name'), array('class' => 'your-class-here'));
于 2014-01-19T12:19:07.720 に答える
0

ZF2のドキュメントから。リンクは次のとおりです:http://framework.zend.com/manual/2.0/en/modules/zend.form.view.helpers.html#formelementerrors

echo $this->formElementErrors($element, array('class' => 'help-inline'));
// <ul class="help-inline"><li>Value is required and can&#039;t be empty</li></ul>
于 2013-12-11T14:46:03.393 に答える
0

私はecho $this->formElementErrors($form, array('class' => "error-messages"));すべてのエラーメッセージを1か所に表示するために使用します。

echo $this->formElementErrors($form, array('class' => "error-messages"));// Print all error messagess

echo $this->formLabel($form->get('Name'));
echo $this->formInput($form->get('Name'));

echo $this->formLabel($form->get('Name2'));
echo $this->formInput($form->get('Name2'));
于 2015-12-10T14:46:33.023 に答える