在Symfony2中创建组合的客户端和服务器端验证

我认为在symfony2 FormValidator组件上创建客户端表单验证将非常有用。

这样做的最好方法是将验证约束传递给表单视图。 有了这些信息,就有可能制作一个模板来呈现一个表单字段,如下所示:

<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部分将查找所有具有data-validation-constraints属性的<input>元素,并为它们创建正确的验证。

为了将验证约束传递给窗体视图,我认为最好的方法是创建一个窗体类型扩展。 这就是我的问题的重点: 这是正确的方式吗? 这怎么可能?

在这个瞬间,我的表单类型扩展如下所示:

use SymfonyComponentFormFormInterface;
use SymfonyComponentFormFormView;
use SymfonyComponentFormFormBuilder;

class FieldTypeExtension extends SymfonyComponentFormAbstractTypeExtension{

    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对象之外的一个窗体域?


检查相应的公开问题“[Form] JavaScript验证”,其中包含对SimpleThingsFormExtraBundle的引用(或者是该包的特定开放PR)。


这是新的Symfony 2包,它将表单类型约束转换为JavaScript验证标尺https://github.com/formapro/JsFormValidatorBundle


你可以做些简单的事情:

FieldType已经将attr属性传递给直接作为attr var传递给表单的表单。 你最好修改这个attr表单的属性,以便添加你的data-validation-constraints属性,因为它可以避免你需要定制表单主题来处理你的新var。

<?php

namespace MyBundleFormType;

use SymfonyComponentFormAbstractTypeExtension;
use SymfonyComponentFormFormBuilder;

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';
    }

}
链接地址: http://www.djcxy.com/p/9923.html

上一篇: Create combined client side and server side validation in Symfony2

下一篇: Flex++ bad character error and more. new to flex