aus*_*usi 7 php validation symfony-forms symfony
我认为在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>
Run Code Online (Sandbox Code Playgroud)
然后,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());
}
}
Run Code Online (Sandbox Code Playgroud)
如何从FormInterface对象中获取应用于一个表单字段的所有验证约束?
小智 0
你可以做一些更简单的事情:
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';
}
}
Run Code Online (Sandbox Code Playgroud)