Создать совместную проверку на стороне клиента и на стороне сервера в Symfony2 - PullRequest
7 голосов
/ 06 ноября 2011

Думаю, было бы очень полезно создать проверку формы на стороне клиента для компонентов symfony2 Form и Validator.

Лучший способ сделать это - передать ограничения проверки в представление формы. С этой информацией можно было бы сделать шаблон, который отображает поле формы примерно так:

<div>
    <label for="form_email">E-Mail</label>
    <input 
        id="form_email" type="text" name="form[email]" value=""
        data-validation-constraints='{"NotBlank":{},"MinLength":{"limit":6}}'
    />
</div>

В этом случае JavaScript должен был бы найти все <input> элементы с атрибутом data-validation-constraints и создать для них правильную проверку.

Чтобы передать ограничения валидации в представление формы, я подумал, что лучшим способом было бы создать расширение типа формы. В этом смысл моего вопроса: Это правильный путь? И как это возможно?

На данный момент мое расширение типа формы выглядит так:

use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormBuilder;

class FieldTypeExtension extends \Symfony\Component\Form\AbstractTypeExtension{

    public function getExtendedType(){
        return 'field';
    }

    public function buildView(FormView $view, FormInterface $form)
    {
        // at this point i didn't find a way to get the 
        // validation constraints out of the $form
        // the `getAllValidationConstraints` here is just an example
        $view->set('validation_constraints', $form->getAllValidationConstraints());
    }

}

Как я могу получить все ограничения проверки, примененные к одному полю формы из объекта FormInterface?

Ответы [ 3 ]

2 голосов
/ 27 июля 2012

Проверьте соответствующий открытый выпуск "[Form] JavaScript validation" , который содержит ссылку на SimpleThingsFormExtraBundle (или, скорее, конкретный открытый PR этого пакета), который делает это.

1 голос
/ 09 декабря 2013

Это новый пакет Symfony 2, который преобразует ограничения типов форм в линейки проверки JavaScript https://github.com/formapro/JsFormValidatorBundle

0 голосов
/ 10 ноября 2011

Вы можете сделать что-то попроще:

FieldType уже передает атрибут attr в форму, которая непосредственно передается как attr var для просмотра.Вам лучше изменить атрибут формы attr , чтобы добавить атрибут data-validation-constraints , так как это избавит вас от необходимости настраивать тему формы для обработки вашего новоговар.

<?php

namespace MyBundle\Form\Type;

use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilder;

class FieldTypeJsValidationExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $attr = $builder->getAttribute('attr');
        $attr = array_merge(
            array(
                'data-validation-constraints' => $this->aMethodThatRenderTheFinalContentOfTheValidationAttribute(),
            ),
            $builder->getAttribute('attr')
        );

        $builder->setAttribute('attr', $attr);
    }

    public function getExtendedType()
    {
        return 'field';
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...