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 :

Routing avec sfWidgetFormJQueryAutocompleter [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut Routing avec sfWidgetFormJQueryAutocompleter
    Bonjour
    j'ai un petit problème avec le routing et mon widget sfWidgetFormJQueryAutocompleter,
    j'ai une liste d'acteur avec un pager quand je suis sur la premiere page le widget marche l'url de la form localhost:8585/frontend_dev.php/Acteur
    parcontre quand je passe a la seconde page le widget n'affiche aucune donnée url de la forme l'url de la form localhost:8585/frontend_dev.php/Acteur/2
    du coup je pense que c'est lié a ma route qui est definit comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Acteur:
      url:  /Acteur/:page
      class: sfRequestRoute
      param: { module: Acteur, action: index, page: 1 }
      requirements:
       page: \d+
       sf_method: [get]

    module/Acteur/actions/actions.class.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function executeIndex(sfWebRequest $request)
      {
      	$this->formrecherche=new SearchForm();
      	$this->acteurArray=ActeurPeer::getAllActeur($request->getParameter('page'),sfConfig::get('app_total_items_acteur'));
      	return sfView::SUCCESS;
      }
    le module dans lequel j'ai crée le code pour gérer les appels envoyé par sfWidgetFormJQueryAutocompleter
    module/recherche/actions/actions.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function executeActeursearch(sfWebRequest $request)
      {
      	$this->getResponse()->setContentType('application/json');
      	$acteur=ActeurPeer::searchActeurAjax($request->getParameter('q'), $request->getParameter('limit'));
      	$this->renderText(json_encode($acteur));
        return sfView::NONE;	
      	
      }
    et puis le code des Form d'autocompleter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class SearchForm extends sfForm
    {
    	public function configure()
    	{			
    		$this->setWidgets(array(
    							'ActeurRecherche' 		=> new sfWidgetFormJQueryAutocompleter(array('url' => 'Recherche/acteursearch')),
    							'StudioRecherche'	 		=> new sfWidgetFormJQueryAutocompleter(array('url' => 'Recherche/studiosearch')),
    							'FilmRecherche'	 		=> new sfWidgetFormJQueryAutocompleter(array('url' => 'Recherche/filmsearch')),
    							, 
     
    								));
    	}	
    }
    any idea !!?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Salut,

    En fait tu as un champs input pour les acteurs par exemple, et il devrait t'afficher la liste des acteurs trouvés ? c'est ça ?

    Et le second problème c'est la pagination qui ne fonctionne pas ?

    C'est pour essayer d'y voir clair avant de répondre !

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    Salut
    le pager marche, le probléme est que :
    quand je suis dans la premiere page avec cette url : localhost:8585/frontend_dev.php/Acteur
    le champs que j'ai réalisé avec sfwidgetformjqueryautocompleter m'affiche les noms des acteur qui sont dans la base au fur et a mesure que j'insère les lettres
    voici une capture d'ecran d'un exemple d'insertion dans un input


    Comme j'ai une liste importante d'acteur j'ai réalisé un pager pour afficher juste 25 acteur par page.
    du coup quand je passe a la seconde page dont voici l'url localhost:8585/frontend_dev.php/Acteur/2 " mon input de recherche cesse de marcher.
    donc je pense que la cause est surement lié au routing "car mon input marche uniquement quand je suis dans la première page avec l'url décrit en au dessus"
    Images attachées Images attachées  

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Et dans la barre de débug de symfony ? Ou Firebug même si tu l'as.

    Regardes ce qui se passe lorsque tu entres des lettres dans le champs texte. Cherches avec firebug dans la partie réseau si il y a des requêtes effectuées.

    Sinon pour la route, ça a l'air d'aller, l'option page: 1 dans les paramètres sert à mettre une valeur par défaut c'est ça ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    j'ai utilisé firebug et voici le resultat de l'url ...en rouge quand je suis dans la page 2
    http://localhost:8585/frontend_dev.php/Acteur/Recherche/acteursearch?q=s&limit=0&timestamp=1279628101075
    or qu'il doit être comme ça
    http://localhost:8585/frontend_dev.php/Recherche/acteursearch?q=s&limit=0&timestamp=1279628101075
    car pour j'ai preferé mettre le code correspondant aux input dans un module a part qui est Recherche

    pour l'option page: 1 est une valeur par default

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    Et dans le template ? Comment génères tu la route ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    le voici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Acteur:
      url:  /Acteur/:page
      class: sfRequestRoute
      param: { module: Acteur, action: index, page: 1 }
      requirements:
       page: \d+
       sf_method: [get]
    aprés j'utilise url_for
    parcontre je desire déclarer une nouvelle route vers le module Recherche dans lequel il y a le code pour les sfwidget que j'ai crée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Recherche:
     url: /Recherche
     param: { module: recherche, action: index }
    mais en ajoutant dans la declaration des input j'ai le message d'erreur url_for undefenied
    [/CODE]
    class SearchForm extends sfForm
    {
    public function configure()
    {
    $this->setWidgets(array(
    'ActeurRecherche' => new sfWidgetFormJQueryAutocompleter(array('url' => url_for('@Recherche/acteursearch'))),

    ,

    ));
    }
    }

    [/CODE]

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ta solution ne semble pas mauvaise, mais il manque le code de la méthode :
    ActeurPeer::getAllActeur()

    As-tu un retour exploitable de page dans le execute ? As-tu vérifié qu'il récupère bien le numéro de la page ?

    Tu initialise un $this->formrecherche=new SearchForm() object, mais pas de code de cet objet, qu'elle est-ils ? Est-ce un objet enfant de sfFilter ?

    Tu gères des numéros de pages, mais tu ne semble pas utiliser un objet pager, une volonté ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    hello
    voici les bouts de code qui manquent :
    concernant getAllActeur() qui est dans ActeurPeer.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static function getAllActeur($currentPage,$totalItems)
    	{
    		$c =new Criteria();
    		$c->addAscendingOrderByColumn(self::NOM);
     
    		$pagerObj= new sfPropelPager('acteur',$totalItems);
    		$pagerObj->setCriteria($c);
    		$pagerObj->setPage($currentPage);
    		$pagerObj->init();
     
    		return $pagerObj;
    	}

    concernant searchActeurAjax qui est executé dans le module Recheche sous l'action executeActeurresearch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static public function searchActeurAjax($q,$limit)
    	{
    		$c=new Criteria();
    		$c->add(self::NOM,'%'.$q.'%', Criteria::LIKE);
    		$c->addAscendingOrderByColumn(self::NOM);
    		$c->setLimit($limit);
    		$acteurs=array();
    		foreach(self::doSelect($c) as $acteur)
    		{
    			$acteurs[$acteur->getidacteur()] = (string) $acteur;
    		}
    		return $acteurs;
        }
    et voici le bout de code du pager _paginationActeur.php :
    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
     
    <?php if ($paginationObjActeur->haveToPaginate()): ?>
       <div style="margin-top: 10px;">
            <?php if($paginationObjActeur->getFirstPage() !=$paginationObjActeur->getPage()): ?>
            <?php echo link_to('&laquo;', '@Acteur?page='.$paginationObjActeur->getFirstPage(),'class="pageLink"') ?>
            <?php echo link_to('&lt;','@Acteur?page='.$paginationObjActeur->getPreviousPage(),'class="pageLink"') ?>
            <?php endif ?>
     
     
            <?php $links = $paginationObjActeur->getLinks();
                   foreach ($links as $page): ?>
            		<?php echo ($page == $paginationObjActeur->getPage()) ?
                   		'<span class="selectedPageBox">'.$page.'</span>' :
                   		link_to($page, '@Acteur?page='.$page ,'class="pageLink"')?>
            		<?php endforeach ?>
     
     
            <?php if($paginationObjActeur->getLastPage() !=$paginationObjActeur->getPage()): ?>
                     <?php echo link_to('&gt;', '@Acteur?page='.$paginationObjActeur->getNextPage(),'class="pageLink"') ?>
                     <?php echo link_to('&raquo;','@Acteur?page='.$paginationObjActeur->getLastPage(),'class="pageLink"') ?>
            <?php endif ?>
    </div>
    <?php endif ?>
    et voici le code concernant la forme de recherche _formrecherche qui dans le module Recherche et appelé dans un partial ActeurSuccess.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php use_javascript ('/js/jquery-1.3.2.min.js') ?>
    <?php use_javascript ('/sfFormExtraPlugin/js/jquery.autocompleter.js') ?>
    <?php use_stylesheet ('/sfFormExtraPlugin/css/jquery.autocompleter.css') ?>
     
    <?php echo $form?>
    et puis ActeurSuccess.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <div id="contenuCentral">
    <td><?php include_partial('Recherche/formrecherche',array('form'=>$form['ActeurRecherche']))?> </td>
    </div>
    ..................
    .................
    <div id="contenuBas">
    		<?php include_partial('paginationActeur',array('paginationObjActeur'=>$acteurArray))?>		
    		</div>

    en espérant que c'est claire

  10. #10
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    As-tu vérifiés le contenu de $currentPage dans la méthode getAllActeur (par un die($currentPage) ) par exemple ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    pour la pager c'est bon
    le probleme c'est que le include_partial('Recherche/formrecherche',array('form'=>$form['ActeurRecherche'])) ne marche pas comme je l'éspere
    quand je suis dans la page d'acceuil d'acteur avec l'url suivante : localhost:8585/frontend_dev.php/Acteur l'input de recherche marche d'ailleur en verifiant l'url de l'action ajax avec figebug je le trouve comme suivant :
    http://localhost:8585/frontend_dev.php/Recherche/acteursearch?q=a&limit=0&timestamp=1279699166144

    donc le partial marche bien en pointant sur le module Recherche et inculant _formsearch.php

    parcontre quand je passe a la page 2 la nouvelle url sera http://localhost:8585/frontend_dev.php/Acteur/2
    du coup quand je désire chercher un acteur en utilisant l'input
    voici l'url sur lequel il pointe
    http://localhost:8585/frontend_dev.php/Acteur/Recherche/acteursearch?q=a&limit=0&timestamp=1279699380247

    du coup je pense que SOIT :
    A) le fonctionnement de l'inculde_partial est asser basique car il ne cherche pas le module en utilisant la route definit dans routing il ne fait que monter d'un cran dans les fichier "./" car avant il avait :
    http://localhost:8585/frontend_dev.php/Acteur <- et la fonction ajax s'execute correctement http://localhost:8585/frontend_dev.php/Recherche/acteursearch?q=a&limit=0&timestamp=1279699166144

    parcontre a la seconde page :
    http://localhost:8585/frontend_dev.php/Acteur/2 <- l'url crée par l'include_partial est http://localhost:8585/frontend_dev.php/Acteur/Recherche/acteursearch?q=a&limit=0&timestamp=1279699166144
    or Recherche est un module ??!!!!

    B) ou bien comme l'input s'affiche sa me laisse a pensé que c'est l'url qui est dans la declaration de la Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class SearchForm extends sfForm
    {
    	public function configure()
    	{			
    		$this->setWidgets(array( 
    'ActeurRecherche'	 		=> new sfWidgetFormJQueryAutocompleter(array('url' => 'Recherche/acteursearch')),
    ));
    qui ne pointe pas vers le module Recherche

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    Après réflexion c'est le B qui pose problème donc voici comment j'ai fait
    j'ai ajouté la route dans 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
     
    class SearchForm extends sfForm
    {
    	public function configure()
    	{			
    		$context = sfContext::getInstance();
     
    		$this->setWidgets(array(
     
    							'ActeurRecherche'	 		=> new sfWidgetFormJQueryAutocompleter(array('url' => $context->getController()->genUrl('@Recherche').'/acteursearch')),
     
    								));
    	}	
    }
    Merci de votre Aide

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Par défaut
    C'est cool

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Par défaut
    possible de faire plus propre en ajouter une route pour chaque action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RechercheActeur :
     url: /Recherche
     param: { module: recherche, action: acteursearch }
    et dans 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
     
    class SearchForm extends sfForm
    {
    	public function configure()
    	{			
    		$context = sfContext::getInstance();
     
    		$this->setWidgets(array(
     
    		'ActeurRecherche'=> new sfWidgetFormJQueryAutocompleter(array('url' => $context->getController()->genUrl('@RechercheActeur'))),
     
    								));
    	}	
    }

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/07/2014, 13h05
  2. probleme de routing avec ISA 2006
    Par maikess dans le forum Sécurité
    Réponses: 0
    Dernier message: 17/05/2010, 12h03
  3. Réponses: 4
    Dernier message: 12/04/2010, 16h48
  4. [1.x] Routing avec url_for()
    Par koli77 dans le forum Symfony
    Réponses: 5
    Dernier message: 29/12/2009, 14h08
  5. Ruby on Rails et Routes avec 2 tables reliées
    Par Miles Raymond dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 17/06/2009, 08h14

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