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 :

Formulaire de recherche


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut Formulaire de recherche
    depuis peu je cherche à réaliser un formulaire de recherche pour afficher la liste de contact selon le champ d'un formulaire
    [IMG]Bureau\formRech[/IMG]

    Le formulaire est definit comme suit :
    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
    <?php
    namespace Cnce\AnnuaireBundle\Form;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    class ContactRechercheForm extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
    {
       // Champ de recherche full text
         $builder->add('Nom', 'text', array('label' => 'Choix du Site '));
    }
        public function getName()
    {
        return 'contactrecherche';
    }
    public function getDefaultOptions(array $options)
        {
       return array(
        'data_class' => 'Cnce\AnnuaireBundle\Entity\Site',
        );
        }
    }
    Lorsque le formulaire ci-dessus s'affiche, on met le nom d'un site et en cliquant sur le bonton "Rechercher tous le contact" on execute l'action RechBySite du controleur Contact definit par la route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CnceAnnuaireBundle_Rech_Contact_by_site:
        pattern: /contact/rechbySite/{nomsite}
        defaults: { _controller: CnceAnnuaireBundle:Contact:RechBySite,nomsite:'' }
    L' action elle se definit comme suit :
    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
    33
    34
    35
    36
    37
    //Executer l’action RechBySiteAction  du controleur 
        public function RechBySiteAction($nomsite) // je veux récupérer comme paramètre le champ du formulaire
    {     
        /* Tableau qui va stocker toutes les données à remplacer dans le template twig */
        $variables = array();  
     
        // Récupération de l'entity manager qui va nous permettre de gérer les entités.
        $entityManager = $this->get('doctrine.orm.entity_manager');       
     
        // On recherche dans la table Site l'enregistremnet qui correspond au nomsite reçut par l'url et on stocke l'objet Site dans une variable
     
        $selected_site = $entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Site")->findBy(array("nomsite" => $nomsite));  
     
          // Si le site passé par l'url existe bien, on passe l'id à notre template
        if(isset($selected_site[0])) {
            $variables['selected_site'] = $selected_site[0]->getId();
        }
        // Sinon on renvoie 0, aucun site n'a été sélectionné
        else {
            $variables['selected_site'] = 1; // on affiche les contact du SED
        }
        // Récupération de la liste des contacts grâce à notre méthode findBySite.
           $contact_list = $entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Contact")->findBySite($variables['selected_site']);
        $variables['Contacts'] = $contact_list;
     
        // On récupère le nombre total de contacts en comptant simplement le resultat de la recheche de tous les contacts
        $variables['total_nb_contacts'] = count($entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Contact")->findAll());       
        /* On récupère la liste des sites avec le nombre de contacts associés pour notre sidebar */           
        $variables['Sites'] = $entityManager->getRepository('Cnce\\AnnuaireBundle\\Entity\\Site')->fetchAllWithContactsCount() ;
     
        /*return $this->container->get('templating')->renderResponse('CnceAnnuaireBundle:Contact:ResultatRech.html.twig', array(
          'contact_list' => $contact_list
         ));*/
         return $this->container->get('templating')->renderResponse('CnceAnnuaireBundle:Contact:ResultatRech.html.twig', array(
          'contact_list' => $contact_list
         ));
    }
    Mon problème
    J'arrive à avoir le resultat quand je test en saisissant le nom du site dans l'url mais je souhaite maintenant mettre en paramètre le champ sur le formulaire dans la l'action RechBySiteAction; en fait je souhaite remplacer $nomsite par ce que je sais pas , aidez-moi je maitrise pas SF2

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Par défaut J'attend encore votre aide , ou est winzou
    Citation Envoyé par diabgate Voir le message
    depuis peu je cherche à réaliser un formulaire de recherche pour afficher la liste de contact selon le champ d'un formulaire
    [IMG]Bureau\formRech[/IMG]

    Le formulaire est definit comme suit :
    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
    <?php
    namespace Cnce\AnnuaireBundle\Form;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    class ContactRechercheForm extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
    {
       // Champ de recherche full text
         $builder->add('Nom', 'text', array('label' => 'Choix du Site '));
    }
        public function getName()
    {
        return 'contactrecherche';
    }
    public function getDefaultOptions(array $options)
        {
       return array(
        'data_class' => 'Cnce\AnnuaireBundle\Entity\Site',
        );
        }
    }
    Lorsque le formulaire ci-dessus s'affiche, on met le nom d'un site et en cliquant sur le bonton "Rechercher tous le contact" on execute l'action RechBySite du controleur Contact definit par la route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CnceAnnuaireBundle_Rech_Contact_by_site:
        pattern: /contact/rechbySite/{nomsite}
        defaults: { _controller: CnceAnnuaireBundle:Contact:RechBySite,nomsite:'' }
    L' action elle se definit comme suit :
    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
    33
    34
    35
    36
    37
    //Executer l’action RechBySiteAction  du controleur 
        public function RechBySiteAction($nomsite) // je veux récupérer comme paramètre le champ du formulaire
    {     
        /* Tableau qui va stocker toutes les données à remplacer dans le template twig */
        $variables = array();  
     
        // Récupération de l'entity manager qui va nous permettre de gérer les entités.
        $entityManager = $this->get('doctrine.orm.entity_manager');       
     
        // On recherche dans la table Site l'enregistremnet qui correspond au nomsite reçut par l'url et on stocke l'objet Site dans une variable
     
        $selected_site = $entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Site")->findBy(array("nomsite" => $nomsite));  
     
          // Si le site passé par l'url existe bien, on passe l'id à notre template
        if(isset($selected_site[0])) {
            $variables['selected_site'] = $selected_site[0]->getId();
        }
        // Sinon on renvoie 0, aucun site n'a été sélectionné
        else {
            $variables['selected_site'] = 1; // on affiche les contact du SED
        }
        // Récupération de la liste des contacts grâce à notre méthode findBySite.
           $contact_list = $entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Contact")->findBySite($variables['selected_site']);
        $variables['Contacts'] = $contact_list;
     
        // On récupère le nombre total de contacts en comptant simplement le resultat de la recheche de tous les contacts
        $variables['total_nb_contacts'] = count($entityManager->getRepository("Cnce\\AnnuaireBundle\\Entity\\Contact")->findAll());       
        /* On récupère la liste des sites avec le nombre de contacts associés pour notre sidebar */           
        $variables['Sites'] = $entityManager->getRepository('Cnce\\AnnuaireBundle\\Entity\\Site')->fetchAllWithContactsCount() ;
     
        /*return $this->container->get('templating')->renderResponse('CnceAnnuaireBundle:Contact:ResultatRech.html.twig', array(
          'contact_list' => $contact_list
         ));*/
         return $this->container->get('templating')->renderResponse('CnceAnnuaireBundle:Contact:ResultatRech.html.twig', array(
          'contact_list' => $contact_list
         ));
    }
    Mon problème
    J'arrive à avoir le resultat quand je test en saisissant le nom du site dans l'url mais je souhaite maintenant mettre en paramètre le champ sur le formulaire dans la l'action RechBySiteAction; en fait je souhaite remplacer $nomsite par ce que je sais pas , aidez-moi je maitrise pas SF2

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

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

    ton paramètre étant passé directement dans la route, le fait de valider un formulaire ne peut pas transformer l'url de soumission de ce formulaire, à part faire des manipulations en javascript ou bien faire une redirection dans une action de ton controller.

    Mon avis:
    Dans ce que tu fais, Il n'y a pas vraiment de nécessité de passer par les formulaires symfony (qui sont trés intéressant lorsque l'on a de nombreux champs et des contraintes de validation, mais là ce n'est pas le cas).
    Tu peux faire beaucoup plus simple en créant ton formulaire et ton input directement dans twig, en transmettant ce formulaire par get, et en récupérant ce champ dans l'action de ton controller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //template
    <form action="{{url('search')}}" method="get">
    <input type="text" name="nom_site"/>
    <button type="submit">chercher</button>
    </form>
    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
     
    //controller
     public function RechBySiteAction(){
    $nomSite=$this->getRequest()->get('nom_site');
    //si $nomSite est vide on renvoit une page d'erreur
     
    // recherche dans la base de $nomSite
     
     if(count($sites)==1){
      //si une seule réponse on peut renvoyer sur la page dédié (avec une url propre éventuellement) 
      $url=$this->get('router')->generate('page_site',array('id'=>$sites[0]->getId());
      return new RedirectResponse($url);
     }
    //sinon on affiche la liste
    //...
    }

Discussions similaires

  1. Formulaire de recherche multitables
    Par SpyesX dans le forum Access
    Réponses: 7
    Dernier message: 24/11/2005, 11h50
  2. [MySQL] Formulaire de recherche PHP + un script d recherche en HTML
    Par Dsphinx dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 09/11/2005, 19h44
  3. alléger un formulaire de recherche
    Par jarod71 dans le forum Langage
    Réponses: 4
    Dernier message: 28/10/2005, 11h11
  4. Réponses: 3
    Dernier message: 20/10/2005, 12h42
  5. Réponses: 5
    Dernier message: 18/10/2005, 14h09

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