2016-04-11 6 views
1

フォーム行の周囲にフィールドセットタグをラップするにはどうすればいいですか?要素の検証に失敗した場合、フィールドセットに危険有害なクラスを追加するにはどうすればよいですか?フォーム検証エラーのZF2レンダリングカスタムクラス

私はviewhelperを作成し、特定のformelementが検証メッセージを持っているかどうかをチェックし、行をフィールドセットでラップする必要があると思うが、正しいアプローチかどうかはわからない。

私が検証エラーにしたい出力:

<fieldset class="has-danger"><label for="username">Username</label> 
<input type="text" name="username" id="username" class="form-control 
input-error" value="f"><ul><li>Needs to be 5-20 characters long</li> 
</ul></fieldset> 

register.phtml:

<?php 
$form = $this->registerForm; 
$form->prepare(); 
echo $this->form()->openTag($form); 

echo $this->formHidden($form->get('secret')); 
echo $this->formRow($form->get('username')); 
echo $this->formRow($form->get('password')); 
echo $this->formRow($form->get('email')); 
echo $this->formRow($form->get('confirm-email')); 
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag($form); 
+0

こんにちはする@ user1989781は、あなたがより精度のためにあなたの*の.phtmlコードを貼り付けることができますか? – jbrtrnd

+1

可能な回答はこちらhttp://stackoverflow.com/questions/24183321/in-zf2-how-to-add-a-error-css-class-on-validation-failed – dixromos98

答えて

0

に[OK]を、あなたの代わりにformRow()formLabel()formElement()formElementErrors()ビューヘルパーを使用する必要があります。

私のZF2の知識によれば、formRow()ビューヘルパーでは、HTML出力を簡単に制御することはできません。 1行のコードに完全な入力HTML(ラベル+入力+エラー)を表示します。

は、単にあなたの目標を達成するために、一つの入力のためのあなたのPHTML構造は以下の通りである必要があります:

// NAME_OF_YOUR_FILE.phtml 
<?php 
    $userNameInput  = $form->get('username'); 
    $userNameInputErrors = $this->formElementErrors($userNameInput); 
?> 
<fieldset class="<?= $userNameInputErrors ? 'has-danger' : '' ?>" > 
    <?= $this->formLabel($userNameInput) ?> 
    <?= $this->formElement($userNameInput) ?> 
    <?= $userNameInputErrors ?> 
</fieldset> 

これは、フォーム内の各フィールドのためにこれを行うにはハードワークであるので、私はあなたがこれを置くことを提案しますビューヘルパーのロジック。

// MyFormRow.php 
<?php 
    namespace Your\Namespace; 

    use Zend\View\Helper\AbstractHelper; 

    class MyFormRow extends AbstractHelper 
    { 
     protected $formLabelViewHelper; 
     protected $formElementViewHelper; 
     protected $formElementErrorsViewHelper; 

     public function __construct($formLabelViewHelper, $formElementViewHelper, $formElementErrorsViewHelper) 
     { 
      $this->formLabelViewHelper   = $formLabelViewHelper; 
      $this->formElementViewHelper  = $formElementViewHelper; 
      $this->formElementErrorsViewHelper = $formElementErrorsViewHelper; 
     } 

     public function __invoke($formElement) 
     { 
      $html = ''; 

      $errors = $this->formElementErrorsViewHelper->__invoke($formElement);  

      $html .= '<fieldset class=" . ($errors ? 'has-danger' : '') . ">';  
       $html .= $this->formLabelViewHelper->__invoke($formElement); 
       $html .= $this->formElementViewHelper->__invoke($formElement); 
       $html .= $errors; 
      $html .= '</fieldset>'; 

      return $html; 
     } 
    } 
?> 

Module.phpで宣言してください。あなたのPHTMLファイル内

// In your Module.php 
<?php 

    ... 

    public function getViewHelperConfig() 
    { 
     return [ 
      'factories' => [ 
       'myFormRow' => function (HelperPluginManager $helperPluginManager) { 
        $formLabelViewHelper  = $helperPluginManager->get('formLabel'); 
        $formElementViewHelper  = $helperPluginManager->get('formElement'); 
        $formElementErrorsViewHelper = $helperPluginManager->get('formElementErrors'); 

        return new MyFormRow($formLabelViewHelper, $formElementViewHelper, $formElementErrorsViewHelper); 
       }, 
      ], 
     ]; 
    } 
?> 

そして今、単に:

// NAME_OF_YOUR_FILE.phtml 

... 

<?= echo $this->myFormRow($form->get('username')) ?> 

... 
+0

ありがとう! :) なんらかの理由で、私はビューヘルパーのような呼び出しメソッドを呼び出さなければなりませんでした。 $ html。= $ this-> formLabelViewHelper - > __ invoke($ formElement); $エラーをインスタンス化するときに、間違ったメソッド名が書き込まれました。 – user1989781

関連する問題