簡體   English   中英

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

    ...

}

這個實體還有一個疑問:每個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)在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留在里面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM