Symfony2,验证在YML文件,实体和表单


Symfony2, validation in YML files, Entities and Forms

我对Symfony2表单+实体+验证过程有一些疑问。以以下代码为例(/src/Common/CommonBundle/Resources/config/validation.yml):

Common'CommonBundle'Entity'AddressExtraInfo:
    properties:
        town:
            - NotBlank: 
                message: "This value should not be blank"
            - Length:
                min: 3
                max: 50
                minMessage: "This value should be {{ limit }} or more"
                maxMessage: "This value should be {{ limit }} or less"
            - Regex:
                pattern: "/^['w'sÑñÁÉÍÓÚáéíóú]+$/"
                match: false
                message: "This value should be of type {{ alfanumérico }}"
现在

  1. 此验证适用于:FormType和Entity还是其中之一?第二种情况是哪一种?
  2. 我在我的应用程序上使用i18n,如果我使用/vendor/symfony/symfony/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf的翻译,然后"fr"消息将是法语还是英语显示?

实体(只是相关代码)看起来是这样的:

<?php
namespace Common'CommonBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Symfony'Component'Validator'Constraints as Assert;
use Gedmo'Mapping'Annotation as Gedmo;
use Common'CommonBundle'Model'BaseEntityTrait;
use Common'CommonBundle'Model'IdentifiedAutogeneratedEntityTrait;
/**
 * @ORM'Entity
 * @ORM'Table(name="address_extra_info")
 * @Gedmo'SoftDeleteable(fieldName="deletedAt")
 */
class AddressExtraInfo
{
    use IdentifiedAutogeneratedEntityTrait;
    use BaseEntityTrait;
    /**
     * Municipio
     * 
     * @ORM'Column(type="string", length=255)
     * @Assert'NotBlank(message="Este valor no debería estar vacío.")
     */
    protected $town;
    ....
    public function setTown($town)
    {
        $this->town = strip_tags($town);
    }
    public function getTown()
    {
        return $this->town;
    }
    ...
}

一个额外的疑问在这个实体:它是必要的strip_tags在每个set方法?还是Doctrine或Symfony来处理这个?

AddressExtraInfoType.php

<?php
namespace Common'CommonBundle'Form;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
use Symfony'Component'Validator'Constraints as Assert;
class AddressExtraInfoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'town', 'text', array(
                'required' => true,
                'attr' => array(
                    'class' => 'address-input wv-tooltip',
                    'style' => 'width:272px;',
                    'placeholder' => 'Municipio *',
                    'tt-placement' => 'right',
                    'validated' => 'validated',
                    'onkeypress' => 'return isAlphaNumeric(event)',
                    'ng-minlength' => '3',
                    'maxlength' => '50',
                    'ng-pattern' => '/^['w'sÑñÁÉÍÓÚáéíóú]+$/',
                    'wv-err' => 'Este valor debería ser de tipo alfanumérico',
                    'wv-cur' => '',
                    'wv-req' => 'Este valor no debería estar vacío.',
                    'wv-min' => 'Este valor debería ser de 3 ó más'
            )));
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'Common'CommonBundle'Entity'AddressExtraInfo'
            )
        );
    }
    public function getName()
    {
        return 'address_extra_info';
    }
}

1)在symfony 2验证文档的最顶部:

"验证是web应用程序中非常常见的任务。表单中输入的数据需要进行验证。在将数据写入数据库或传递给web服务之前,还需要对其进行验证。Symfony2附带了一个Validator组件,使这项任务变得简单和透明。"

http://symfony.com/doc/current/book/validation.html

2)取决于你是否设置正确:http://symfony.com/doc/current/book/translation.html#translating-constraint-messages

3)有条形标签也无妨。Symfony表单只会传回用户给出的信息,但是用户可以输入标签,所以如果担心这个问题,请将strip_tags留在

中。