IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Validation des champs avec sonata admin


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Points : 34
    Points
    34
    Par défaut Validation des champs avec sonata admin
    Bon j'ai cherché trop avant de venir présenter mon problème ici,je travaille avec sonata admin bundle et je ne trouve pas une solution pour la validation de mon champ "slug" qui est déclaré unique à ma BD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected function configureFormFields(FormMapper $formMapper)
        {
            $formMapper
                 ->with('News')
                  ->add('title', null, array('label' => 'Title', 'required' => true))
                   .....
                    ->add('slug', null, array('label' => 'Alias', 'required' => true))
    Ce que je cherche c'est de trouver un moyen pour le verifier si il est unique avant l'enregistrement et avant aussi que symfony me passe sur son page par défaut d'erreur avec le message de la BD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '.......' for key 'slug'
    Deuxiément si vous avaez une idée pour générer un slug automatiquement à partir d'un autre champ(pour mon cas c'est "title"),avant c'était simple si je me souviens avec symfony1.4

    Merci...

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Le plus simple pour générer un slug c'est de passer par les extensions doctrine:
    https://github.com/stof/StofDoctrineExtensionsBundle

    une fois le bundle et sa librairie installé et configuré, il suffit d'ajouter des annotations dans ton entité.

    pour la 1ere question, il existe une contrainte pour vérifier qu'un champ est unique:
    http://symfony.com/doc/2.0/reference...queEntity.html

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Points : 34
    Points
    34
    Par défaut
    Merci Arnoo pour ta réponse,bon j'ai installé et j'ai bien configuré StofDoctrineExtensionsBundle et j'ai fait comme cela dans mon entité pour tester avec sluggable :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
     
    namespace MyBundle\NewsBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Gedmo\Mapping\Annotation as Gedmo;
     
    /**
     * @Gedmo\Tree
     */
     
    ................
     
    ..............
     
      /**
         * @var string $title
         * 
         * @Gedmo\Sluggable(slugField="alias")
         * @ORM\Column(name="title", type="string", length=45, nullable=false)
         */
        private $title;
     
           /**
         * @var string $alias
         * 
         * @Gedmo\Slug
         * @ORM\Column(name="alias", type="string", length=255, nullable=false)
         */
        private $alias;
    .......

    Mais pendant l'insertion des donnée en utilisant "Sonata admin Bundle" rien ne se passe et toujours je trouve le champs slug est NULL,franchement je ne comprend pas ou Gedmo va interagir....

    config.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    doctrine:
        dbal:
            driver:   %database_driver%
            host:     %database_host%
            port:     %database_port%
            dbname:   %database_name%
            user:     %database_user%
            password: %database_password%
            charset:  UTF8
     
        orm:
            auto_generate_proxy_classes: %kernel.debug%
            auto_mapping: true
            mappings:
                StofDoctrineExtensionsBundle: false
    ............
    ............
     
    stof_doctrine_extensions:
        default_locale: en_US
        orm:
            default:
                timestampable: true
                sluggable: true
                tree: true
    ............
    et voilà

    Merci.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Points : 34
    Points
    34
    Par défaut
    Aucune idée!!

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Voici ma config (qui fonctionne avec SonataAdminBundle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    //config.yml
    # Doctrine Configuration
    doctrine:
        dbal:
            driver:   %database_driver%
            host:     %database_host%
            port:     %database_port%
            dbname:   %database_name%
            user:     %database_user%
            password: %database_password%
            charset:  UTF8
     
        orm:
            auto_generate_proxy_classes: %kernel.debug%
            auto_mapping: true
     
    #doctrine extension
    stof_doctrine_extensions:
        default_locale: fr
        orm:
            default:
                timestampable: true
                sluggable: true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    //My/Bundle/Entity/Entity
    use Doctrine\ORM\Mapping as ORM;
    use Gedmo\Mapping\Annotation as Gedmo;
    .....
           /**
    	 * @var string $nom
    	 *
    	 * @ORM\Column(name="nom", type="string", length=255, nullable=false)
    	 */
    	private $nom;
    	/**
    	 * @var string $slug
    	 *
    	 * @ORM\Column(name="slug", type="string", length=255, nullable=true)
    	 * @Gedmo\Slug(fields={"nom"})
    	 */
    	private $slug;
     
    .....
    Dans ton formulaire tu ajoutes au champ de nom "slug", je ne le vois pas dans ton code.
    l'annotation sluggable doit se mettre sur cet attribut slug (et pas sur title).
    Je vois pas non plus pourquoi il y a une annotation @Gedmo\Tree sur ton entité.

    Sinon fait tu vraiment une mise à jour dans test tests (si tu valide le formulaire sans faire de saisie, tu ne passeras pas par les listener Doctrine).

    Tu trouveras plus d'infos sur les extensions doctrine à ces adresses:
    https://github.com/l3pp4rd/DoctrineE...c/sluggable.md
    http://gediminasm.org/article/annota...edmo-sluggable

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2009
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 75
    Points : 34
    Points
    34
    Par défaut
    Merci Arnoo,je comprends très bien ton dernier message mais ce n'est plus là le problème,j'ai oublié de suivre très bien la documentation et j'ai pas changé mon fichier orm.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ......
     
    <field name="slug" type="string" column="slug" length="255" unique="true">
        <gedmo:slug unique="true" style="camel" updatable="false" separator="_"/>
        </field>

    Mais j'ai un autre petit problème,c'est que je récupère le slug dans mon base de donnée avec un format bizarre voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Jwrdywl_L_Ywjd_Mw_D_Nhy_Y_Ltjdyd_Qdy_M
    c'est surement un problème d'encodage et je ne sais pas ou je peux toucher....

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2010, 18h55
  2. Valider qu'une partie des champs avec les annotations
    Par TucoBouch dans le forum Struts 2
    Réponses: 3
    Dernier message: 11/08/2009, 14h26
  3. Validation des champs
    Par Alec6 dans le forum JSF
    Réponses: 5
    Dernier message: 24/01/2007, 17h48
  4. [PHP-JS] bouton reset ne supprimant pas des champs avec value
    Par SegmentationFault dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2006, 14h52
  5. Réponses: 3
    Dernier message: 23/10/2005, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo