sfWidgetFormDoctrineJQueryAutocompleter
1 – Installation du plugin sfFormExtraPlugin
2 – Création du formulaire de recherche lib/form/doctrine/RechercheIndividuForm.class.php :
<?php class RechercheIndividuForm extends BaseForm { public function configure() { sfProjectConfiguration::getActive()->loadHelpers(array("Url")); $this->widgetSchema['individu_id'] = new sfWidgetFormDoctrineJQueryAutocompleter( array( 'model' => "Individu", 'url' => url_for("@recherche_individu_par_nom"), 'label' => 'Nom', ), array( 'size' => 25 ) ); } }
3 – Modification du routing.yml :
recherche_individu_par_nom: url: /rechercheIndividuParNom param: { module: main, action: rechercheIndividuParNom }
4- Création de l’action main/rechercheIndividuParNom :
public function executeRechercheIndividuParNom($request) { $this->getResponse()->setContentType('application/json'); $nom = $request->getParameter('q'); $limit = $request->getParameter('limit'); $result = IndividuTable::getIndividusByNameLike($nom,$limit); return $this->renderText(json_encode($result)); }
5 – Création de la méthode de récupération de nos individus :
public static function getIndividusByNameLike($nom, $limit = 10) { $request = Doctrine::getTable("Individu")->createQuery() ->where("nom LIKE ?",$nom."%") ->limit($limit) ->orderBy('nom, prenom') ->execute() ->getData(); $individus = array(); foreach ( $request as $individu ) $individus[$individu->id] = (string) $individu; return $individus; }
6 – Modification de l’action pour récupérer le formulaire dans le template :
$this->RechercheIndividuForm = new RechercheIndividuForm();
7 – Affichage du formulaire dans un template :
<?php include_stylesheets_for_form($RechercheIndividuForm) ?> <?php include_javascripts_for_form($RechercheIndividuForm) ?> <form action="<?php echo url_for('main/fiche') ?>" method="POST"> <table> <?php echo $RechercheIndividuForm ?> </table> </form>