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 :

L'action rechercher, impossible de récupérer la valeur recherchée [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut L'action rechercher, impossible de récupérer la valeur recherchée
    Bonjour,
    Je travaille depuis 2 jours sur une fonctionnalité de recherche dans mon application. Je n'arrive pas à récupérer la valeur entrée dans le formulaire même si j'ai utilisé l'objet request comme dans la doc officielle. Quand je ne passe pas par le formulaire la requête dans le repository marche bien et la vue m'affiche le résultat comme attendu, je ne comprends pas d’où cela peut venir...

    Voici un aperçu de mon code :
    Le formulaire de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('value', 'text', array('property_path'=>false));
        }
    La requête dans le repository:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('t');
     
    		$qb->where('t.priorite = :formvalue')
    		     ->setParameter('formvalue', $formvalue);
     
    		return $qb->getQuery()->getResult();
    	}
    Mon action dans le contrôleur, et là ou, je crois, il y a le problème :

    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
    <?php
    /**
         * Lists all Tache entities.
         *
         * @Route("/", name="tache")
         * @Template()
         */
        public function indexAction()
        {	
     
    		$request = $this->get('request');   
     		$formvalue= $request->request->get('value');  /*Cette ligne censé récupérer la valeur ne marche pas, quand je fais par exemple $formvalue=3; j'ai le resultat attandu */
    		$tache = new Tache();
    		$search_form=$this->createForm(new RechercheType(), $tache);
    		if($request->getMethod()=='POST')
    		{
     
    				$em = $this->getDoctrine()->getEntityManager(); 
    				$taches = $em->getRepository('spTacheBundle:Tache')->getSearchList($formvalue);
    		}
    		else
    		{
            $em = $this->getDoctrine()->getEntityManager();
     
            $taches = $em->getRepository('spTacheBundle:Tache')->findAll();
    		}
            return array(
                'taches' => $taches,
    			'formvalue' => $formvalue,
                'search_form' => $search_form->createView()
            );
    Et finalement le bout de la vue qui contient le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h1>Tache list {{formvalue}}</h1>
    <form action="{{ path('tache') }}" method="post" >
     {{form_widget(search_form) }}
     <p>
            <button type="submit">search</button>
        </p>
    </form>
    Si vous avez une réponse à ce problème je serais reconnaissant, merci beaucoup

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ça ne marche pas comme ça, faut faire un $form->bindRequest($request); et recupere la valeur du formulaire

    ps : pour $this->get('request') direct $this->getRequest()

  3. #3
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci énormément pour ta réponse
    Dans mon cas j'ai crée un formulaire qui ne se base sur aucune entité et je l'ai appelé dans ma vue twig; ce que j'aimerais faire c'est quand je rentre une valeur dans le champ de recherche (value), pouvoir récupérer cette valeur via le contrôleur et la faire passer à la requête pour le traitement. J'ai fais comme ça mais ça ne marche toujours pas :

    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
    38
    39
    40
    41
    /**
     * Tache controller.
     *
     * @Route("/tache")
     */
    class TacheController extends Controller
    {
        /**
         * Lists all Tache entities.
         *
         * @Route("/", name="tache")
         * @Template()
         */
        public function indexAction()
        {	
     
    		$request=$this->getRequest();
     		$formvalue= $request->request->get('value');
    		$search_form=$this->createForm(new RechercheType(), $formvalue);
    		$search_form->bindRequest($request);
     
    		if($request->getMethod()=='POST')
    		{
     
    				$em = $this->getDoctrine()->getEntityManager(); 
    				$taches = $em->getRepository('spTacheBundle:Tache')->getSearchList($formvalue);
    		}
    		else
    		{
            $em = $this->getDoctrine()->getEntityManager();
     
            $taches = $em->getRepository('spTacheBundle:Tache')->findAll();
    		}
     
     
            return array(
                'taches' => $taches,
    			'formvalue' => $formvalue,
                'search_form' => $search_form->createView()
            );
        }

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est pas bon non plus, le bindRequest à faire uniquement dans la condition du POST, et pour récupérer les données c'est getData

  5. #5
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci encore stealth35;
    Je vais tout refaire en me documentant plus sur l'objet request. Dis moi juste si je suis sur le bon chemin, voici les étapes que je compte suivre:

    1/ Créer un formulaire avec un seul champ qui ne se base sur aucune entité parce que j'aimerais, qu' en entrant une valeur, récupérer toutes les entités dont n'importe quel champ lui correspond.

    2/ Créer l'action qui va gérer le lien entre le modèle et la vue. C'est là ou je stagne quand il s'agit de récupérer la valeur entrée. J

    3/Adapter la vue pour afficher le formulaire (et le résultat) comme j'ai fais avant!

    Merci beaucoup

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726

  7. #7
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup, je vais pouvoir travailler sur ça ce matin

  8. #8
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup stealth35 grâce à ton aide j'ai pu trouvé la solution (ou presque). Maintenant je récupère la valeur, je la passe à la requête sans problème seulement quand je veux élargir le champ de recherche en visant plus de champs ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function getSearchList ($formvalue) 
    	{
     
    		$qb = $this->createQueryBuilder('t');
     
    		$qb->where('t.priorite = :formvalue')
    				  ->orWhere("t.nomtache LIKE :formvalue")
    				  ->orWhere("t.utilisateur LIKE :formvalue")
    				  ->setParameter('formvalue', $formvalue);
     
    		return $qb->getQuery()->getResult();
    	}
    J'ai ce problème :
    [Semantical Error] line 0, col 79 near 'nomtache LIKE': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Le plus simple pour faire un moteur de recherche tout champs c'est d'utiliser Lucene

  10. #10
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Avec Symfony2 ? Si tu as un lien qui peut m'être utile je serais reconnaissant je vais me documenter de ma part. En tout cas merci, j'ai réglé le problème de la clause LIKE, c'était juste parce que je cherchais dans des champs d'une autre table sans faire de jointure.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par y0ussef Voir le message
    Avec Symfony2 ? Si tu as un lien qui peut m'être utile je serais reconnaissant je vais me documenter de ma part. En tout cas merci, j'ai réglé le problème de la clause LIKE, c'était juste parce que je cherchais dans des champs d'une autre table sans faire de jointure.
    Oui je m’embêtes plus avec tout ça, j'utilise le Bundle : https://github.com/egeloen/IvoryLuceneSearchBundle,

    tu crées un document par entré de base, (même avec 50000 champs, l'index est vraiment léger)
    ensuite pour faire la recherche c'est juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $luceneSearch->find($query);
    En plus tu peux faire un tri sur les champs

  12. #12
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 38
    Points : 30
    Points
    30
    Par défaut
    Chapeau, je vais me pencher sur cette solution

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/11/2009, 13h34
  2. Impossible de récupérer la valeur d'un menu déroulant
    Par kyake dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2009, 16h00
  3. [ODBC] ACCESS - Impossible de récupérer la valeur de @@identity (équivalent mysql_insert_id)
    Par FredFrance21 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/10/2008, 14h40
  4. [AJAX] Impossible de récupérer les valeurs en Post
    Par Tommyl dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/06/2007, 20h30
  5. [PEAR][HTML_QuickForm] Impossible de récupérer les valeurs du formulaire
    Par Mainman dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/05/2007, 12h15

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