2014-05-07 4 views
0

J'ai quelques doutes autour de Symfony2 Forms + Entities + Processus de Validation. Prenez ce code comme exemple (/src/Common/CommonBundle/Resources/config/validation.yml):Symfony2, validation dans les fichiers, Entités et Formulaires 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 }}" 

Maintenant,

  1. Cette validation s'applique à: FormType et entité ou tout simplement l'un d'entre eux? Dans le second cas lequel?
  2. J'utilise i18n sur mon application, si j'utilise les traductions de /vendor/symfony/symfony/src/Symfony/Component/Validator/Resources/translations/validators.es.xlf et que "fr" les messages seront en français ou seront montrés en anglais?

Voici comment l'entité (juste le code) ressemble à:

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

    ... 

} 

Un doute supplémentaire dans cette entité: il faut les strip_tags dans chaque méthode de jeu? Ou Doctrine ou Symfony s'en occupent-ils?

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

} 

Répondre

1

1) Au sommet de la symfony 2 validation doc.

« La validation est une tâche très courante dans les applications Web Les données saisies dans les formulaires doit valider les données. doit également être validé avant d'être écrit dans une base de données ou transmis à un service Web Symfony2 est livré avec un composant Validator qui rend cette tâche facile et transparente. "

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

2) Dépend si vous configurez tout correctement: http://symfony.com/doc/current/book/translation.html#translating-constraint-messages

3) Il ne fait pas mal d'avoir les balises de la bande. Les formulaires Symfony ne restitueront que les informations fournies par l'utilisateur, mais l'utilisateur peut entrer des balises. Par conséquent, si les données sont en cause, laissez les strip_tags à l'intérieur.

Questions connexes