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 :

Symfony 3 Form type


Sujet :

Symfony PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Symfony 3 Form type
    Bonjour a tous,
    je suis debutant actuellement sur symfony, voila je veux mettre une valeur par defaut a mon {{ form_widget }},
    j'ai procede comme suit, il n'y a pas d'erreur mais il n'y a pas tous justement de resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('num', EntityType::class, array(
                'class' => 'AppBundle:Person',
               'query_builder' => function(EntityRepository $er) {
                    return $er->createQueryBuilder('p')
                        ->select('p, concat(\'PERS\', COALESCE(MAX(p.id)+1, 1)) as num')
                        ->getMaxResults();
               },
                'required'   => true,
                ))
    }
    je veux concat de mon id + 1, mais il n'a pas de resultat, aide moi s'il vous plait

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    un petit up???

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Est-ce que ton querybuilder donne le résultat correct si tu l'utilises en dehors de cette classe? Dans un contrôleur par exemple.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Non, c'est ca le probeleme je sais pas comment proceder pour mettre default value a ma form_widget avec une requete sql

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Si tu n'as pas résolu ce problème, il ne faut pas utiliser le paramètre query_builder d'EntityType mais récupérer un querybuilder à travers le repository de ton entity, et l'utiliser pour faire ce que tu veux. En clair (ceci peut varier en fonction de la version de Symfony que tu utilises),

    - Tu injectes le repository de ton entity dans ton FormType - supposons que la classe s'appelle MyFormType
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    use etc....
     
    class MyFormType extends AbstractType
    {
        /**
         * @var myEntityRepository
         */
        private $myEntityRepository;
     
        public function __construct(MyEntityRepository $myEntityRepository)
        {
            $this->myEntityRepository = $myEntityRepository;
        }
    Si tu utilises Symfony 3.3 avec l'autowiring, c'est bon. Sinon, il faut manuellement ajouter le repository et ton formType comme services dans services.yml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    app.myentity_repository:
            class: AppBundle\Repository\MyEntityRepository
            factory: ["@doctrine.orm.entity_manager", getRepository]
            arguments:
                    - AppBundle\Entity\MyEntity
     
    app.my_form_type:
            class: AppBundle\Form\MyFormType
            arguments: ['@app.app.myentity_repository']
            tags:
                - { name: form.type }
    Maintenant, tu crées une méthode privée dans ton formtype pour récupérer la valeur que tu utiliseras par défaut. Vérifie que ta requête est bonne, car chez moi en faisant un test rapide elle ne donne rien, donc j'ai ici une version légèrement modifiée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private function getNewPersID()
        {
            $builder = $this->myEntityRepository->createQueryBuilder('p')
                                             ->select("concat('PERS', COALESCE(MAX(p.id)+1, 1)) as num")
                                             ->getQuery();
     
            return $builder->getResult()[0]['num'];
        }
    Si le dernier id est 100, cette méthode retournera PERS101 par exemple.

    Maintenant, tu peux utiliser cette valeur dans ton buildForm()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->add('num', null, array(  //Je ne saisis pas bien pourquoi tu veux utiliser un EntityType ici
               'empty_data' => $this->getNewPersID(),
               'data' => $this->getNewPersID(),
                'required'   => true,
                ))
    }
    Ceci ne correspond peut-être pas à 100% à ce que tu veux, mais la démarche est la même, à toi de t'en inspirer.

Discussions similaires

  1. [2.x] Symfony form type collection recursive / deux fois
    Par novacpro dans le forum Symfony
    Réponses: 1
    Dernier message: 03/03/2015, 01h05
  2. réutilisation d'une form type
    Par lasrevinu dans le forum Windows Forms
    Réponses: 12
    Dernier message: 24/02/2010, 23h22
  3. Formulaire avec mise en forme type BBCode
    Par dambui dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/08/2008, 23h57
  4. Mise en forme type Pdf
    Par trapali dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 09/05/2008, 17h35
  5. [Form] : type personnalisé
    Par PpPool dans le forum Delphi
    Réponses: 6
    Dernier message: 25/08/2006, 10h20

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