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 :

sfWidgetFormDoctrineJQueryAutocompleter dans sfGuardUserAdminForm [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut sfWidgetFormDoctrineJQueryAutocompleter dans sfGuardUserAdminForm
    bon, la question du jour

    voila dans mon formulaire sfGuardUserAdminForm j'ai un champ section lié a une table section.

    Le plugin m' a créé un champ select...
    sauf que vu le nombre de section que j'ai, c'est pas ergonomique, j'ai donc voulu le remplacer par un sfWidgetFormDoctrineJQueryAutocompleter (mode d'emploi applique ici

    ça donne:
    sfGuardUserAdminForm:
    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
     
    class sfGuardUserAdminForm extends BasesfGuardUserAdminForm
    {
      /**
       * @see sfForm
       */
      public function configure()
      {	
      	sfContext::getInstance()->getConfiguration()->loadHelpers(array('Url'));
      	$this->widgetSchema['section_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
        $this->widgetSchema['section_id'] = new sfWidgetFormDoctrineJQueryAutocompleter(
          array(
            'model' => "Section",
            'url'   => url_for("@ajax_section")
          ), array('size' => 100)
        );
     
      }
    }
    routing de mon apps:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ajax_section:
      url: /ajax-section
      param: { module: Section, action: ajaxSection }
    mon action:
    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
     
    class Section extends BaseSection
    {
    	public function executeAjaxSection(sfWebRequest $request)
      	{
        	$this->getResponse()->setContentType('application/json');
        	$choices = array();
        	foreach($section = Doctrine::getTable('Section')->getSectionAutocompletion($request->getParameter('q'), $request->getParameter('limit'))->getData() as $p)
        	{
          		$choices[$p->id] = $p->titre;
        	}
        	if($section != array())
        	{
          		return $this->renderText(json_encode($choices));
        	}
      	}
    }
    et mon model table:
    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
     
    class SectionTable extends Doctrine_Table
    {
     
        public static function getInstance()
        {
            return Doctrine_Core::getTable('Section');
        }
     
        public function getSectionAutocompletion($q, $limit)
        {
        	$dq = Doctrine_Query::create()
                ->select("p.id, p.name")
                ->from("Section p")
                ->where("p.name LIKE ?","%".$q."%")
                ->limit($limit)
                ->orderBy('p.name ASC');
        return $dq->execute();
      }
    }
    sauf que quand je tape le début d'une section, rien ne se produit, en allant dans firebug, il me donne ça comme insulte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict
     
    .dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
     
    <head>
     
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     
      <title>sfError404Exception: Action &quot;Section/ajaxSection&quot; does not exist.</title>
     
      <style type="text/css">
    vous auriez des pistes ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Je ne peux pas passer du temps de suite, mais regarde le lien :
    http://www.e-glop.net/main/Petit_gui...ormExtraPlugin

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    oui je l'ai lu aussi. La seule différence c'est que j'utilise une route alors que dans l'exemple que tu donne c'est directe.
    Ce qui m'étonne c'est qu'il ne trouve pas mon action.

    PS: Et qu'il n'est pas MVC, puisque tu as dans le controleur une requete vers une table
    PS2 et le fix indiqué concerne la version 1.2, je ne pense pas que ça soit nécéssaire de le rajouter.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Ne serait-ce qu'un erreur de frappe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            'url'   => url_for("@ajax_section")
    alors que dans ton routing.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ajax_section:
      url: /ajax-section
      param: { module: Section, action: ajaxSection }
    Si ce n'est pas le cas, j'essaierais de voir un peu plus loin que ça.

    PS: Et qu'il n'est pas MVC, puisque tu as dans le controleur une requete vers une table
    Bien relevé
    Ceci dit, c'est facilement refactorable (de la façon dont tu l'as fait d'ailleurs).

    En parlant de refactorer, je te conseillerais de faire une vérification des paramètres du request :
    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
    class Section extends BaseSection
    {
        public function executeAjaxSection(sfWebRequest $request)
        {
            $this->getResponse()->setContentType('application/json');
            $choices = array();
     
            if($request->hasParameter('q') and $request->hasParameter('limit'))
            {
                $q = $request->getParameter('q');
                $limit = $request->getParameter('limit');
            } else
            {
                throw sfXXXException('q et limit doivent être définis dans la requête.');
            }
     
            foreach($section = Doctrine::getTable('Section')->getSectionAutocompletion($q, $limit)->getData() as $p)
            {
                $choices[$p->id] = $p->titre;
            }
     
            if($section != array())
            {
                return $this->renderText(json_encode($choices));
            }
        }
    }

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Je viens juste de remarquer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class Section extends BaseSection
    {
        public function executeAjaxSection(sfWebRequest $request)
    Tes actions doivent être définies dans actions.class.php (le contrôleur). Pas dans ton modèle !
    Normal qu'il ne la trouve pas

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    cela m'a aussi titiller mais c'est écrit comme ça dans l'exemple.
    bon de toute, j'ai corrigé mon routing:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ajax_section:
      url: /ajax_section
      param: { module: Section, action: ajaxSection }
    et j'ai le meme message d'erreur.
    Ce que je pige pas c'est le message d'erreur. Comment ne trouve t il pas mon action Section/sectionAjax, alors que qu'elle existe !!!!!!

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 396
    Par défaut
    Les erreurs de frappe sont possibles aussi dans les tutoriaux

    Sinon, je pense fortement que l'explication est celle juste au-dessus.

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    tu m'as grillé bilbonec
    Je vient de m'en rendre compte.
    Allez petite question subsidiaire, mais j'ai pas encore regardé sur le net; comment réduire la taille du champ ? Parce que la, il fait la totalité de l'écran en largeur

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

Discussions similaires

  1. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  2. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  3. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59

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