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 :

sfWidgetFormJQueryAutocompleter et sauvegardes [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Par défaut sfWidgetFormJQueryAutocompleter et sauvegardes
    Bonjour,

    Je viens exposer un problème qui se pose à moi depuis quelques jours concernant le plugin sfFormExtra et plus précisément le widget sfWidgetFormJQueryAutocompleter. Celui-ci permet, lorsque une touche est enfoncée dans un champs input, d'afficher sous ce dernier une liste de valeurs tirées de la base de données grâce à un appel ajax vers le serveur, ce qui permet une saisie plus rapide des valeurs. Le problème est que je n'arrive pas à sauvegarder d'autres valeurs que celles présentes dans la base. Je vais illustrer mon problème grâce à un cas très simple.

    Soit un projet symfony ayant le modèle suivant (schema.yml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Personne:
      columns:
        nom: { type: string(255), notnull: true }
        ville: { type: string(255), notnull: true }
    Un modèle très simple, avec une seule table donc. Afin de mettre des valeurs dans la base de test j'ai préparé ces fixtures (fixtures.yml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Personne:
    <?php for ($i=1; $i<=100; $i++): ?>
      personne_<?php echo $i ?>:
        nom: personne_<?php echo $i.chr(10) ?>
        ville: <?php echo ($i % 3 == 0 ? 'Paris' : ($i % 3 == 1 ? 'Londres' : 'Rome')).chr(10) ?>
    <?php endfor ?>
    L'autocompletion portera sur le champ Ville qui contient trois valeurs distinctes. Le plugin sfFormExtra étant installé (ainsi que les librairies js liées, les css, etc...) voici le formulaire Personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class PersonneForm extends BasePersonneForm
    {
    	public function configure()
    	{
    		sfContext::getInstance()->getConfiguration()->loadHelpers('Url');		
    		$this->widgetSchema['nom'] = new sfWidgetFormInputText();
    		$this->widgetSchema['ville'] = new sfWidgetFormJQueryAutocompleter(array('url' => url_for('personne/personneVilleAutocomplete')));
    	}
    }
    On note que le sfWidgetFormJqueryAutocompleter pointe vers une action personne/personneVilleAutocomplete (la fameuse option 'url'). Cette option renvoie du json permettant l'affichage de la liste par autocomplétion (de ce côté là tout fonctionne). Voici l'action class du module personne :
    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
    42
    43
    44
     
    class personneActions extends sfActions
    {
    	/**
    	* Executes index action
    	*
    	* @param sfRequest $request A request object
    	*/
    	public function executeIndex(sfWebRequest $request)
    	{
    		$this->form = new PersonneForm();		
    	}
     
    	public function executeValider(sfWebRequest $request){
    		$this->form = new PersonneForm();
    		if($request->hasParameter('personne')){
    			$this->form->bind($request->getParameter('personne'));
    			if ($this->form->isValid()){
    				$this->form->save();
    			}
    		}
    	}
     
    	public function executePersonneVilleAutocomplete(sfWebRequest $request){
     
    		$this->getResponse()->setContentType('application/json');
     
    		$req = sprintf("
    			SELECT DISTINCT(ville) as ville
    			FROM personne
    			WHERE TRIM(UPPER(ville)) LIKE '%%%s%%'
    			GROUP BY ville
    			LIMIT %s",
    				$request->getParameter('q'),
    				$request->getParameter('limit'));
    		$statement = Doctrine_Manager::getInstance()->connection();
    		$villes = $statement->execute($req)->fetchAll();
     
    		$response = array();
    		foreach($villes as $ville) $response[$ville['ville']] = $ville['ville'];
     
    		return $this->renderText(json_encode($response));
    	}
    }
    Je ne mets pas ici le code des templates. L'autocompletion fonctionne correctement. Si j'insère un nouveau contact, par exemple Gérard de Paris (Paris est une des valeurs présente pour le champ ville dans la table Personne) je trouverai ce nouvel élément dans phpMyAdmin, par contre je ne verrai pas Herbert de Montpellier après le form->save(), mais il est vrai que Montpellier n'est pas une valeur présente dans le champ ville.

    Pour résumer je ne peux sauvegarder que des tuples dont les champs de formulaires correspondants dotés d'un widget autocomplete ont été renseignés avec une valeur deja présente dans ce même champs côté base de données (j'essaie d'être le plus clair possible). Moi je voudrai pouvoir mettre n'importe quoi comme valeur.

    Et là je butte sur ce gros caillou. Auriez-vous des idées ? Merci pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 21
    Par défaut
    J'ai proposé une solution ici : http://michael.schuh.free.fr/blog/in...yAutocompleter

    Problème résolu !

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

Discussions similaires

  1. [arbre] Sauvegarder un objet dans un fichier
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 00h55
  2. Sauvegardes
    Par tastalian dans le forum DirectX
    Réponses: 12
    Dernier message: 15/10/2002, 01h30
  3. [ADO] Sauvegarde / lecture de recordset
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/09/2002, 16h54
  4. Sauvegarder une surface dans un fichier
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 18/08/2002, 15h23
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

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