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>