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

时间:2014-05-07 15:16:48

标签: php validation symfony symfony-forms symfony-2.4

我对Symfony2 Forms + Entities + Validation过程有些怀疑。以此代码为例(/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"消息将使用法语或将以英语显示?
  3. 这就是实体(只是相关代码)的样子:

    <?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;
        }
    
        ...
    
    }
    

    此实体中还有一个疑问:每个set方法中的strip_tags是否必要?或者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 个答案:

答案 0 :(得分:1)

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保留。