2016-04-11 2 views
1

Как я могу обернуть тег fieldset вокруг своих строк формы и как добавить класс опасности для набора полей, если элемент не проверяется?ZF2 Render Custom Class при ошибке проверки формы

Мне кажется, мне нужно создать 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

Хорошо, вы должны использовать formLabel(), formElement() и formElementErrors() их помощников вместо formRow().

К моему знанию ZF2, помощник представления formRow() не позволяет вам легко управлять выходом HTML. Он отображает полный ввод 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> 

Это тяжелая работа, чтобы сделать это для каждого поля в форме, поэтому я предлагаю вам поставить это логики в помощнике вида.

Заявить об этом в своем Module.php.

// 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); 
       }, 
      ], 
     ]; 
    } 
?> 

А теперь в файле PHTML, просто:

// NAME_OF_YOUR_FILE.phtml 

... 

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

... 
+0

Спасибо! :) По какой-то причине мне пришлось вызвать метод invoke в моем помощнике вида, например: $ html. = $ This-> formLabelViewHelper -> __ invoke ($ formElement); btw вы написали неправильное имя метода при экземпляровании $ errors. – user1989781

Смежные вопросы