Typiquement, vous avez un SELECT dans un de vos formulaires. Ce SELECT est créé par un widget sfWidgetFormDoctrineChoice. S'affiche alors un beau menu déroulant avec la valeur des identifiants (1,2,3 au lieu de pomme,poire,raisin etc...).
Pour afficher le nom de l'objet Doctrine - appelons le myObject - il suffit d'aller dans sa Classe et de définir la méthode _toString :
class MyObject extends BaseMyObjectS'affiche alors un beau menu déroulant avec - comme intitulé (option du select) - poire,pomme, raisin ...
{
public function __toString()
{
return $this->getNom();
# évidement, il doit y avoir un champ "nom" dans la table "my_object'
}
}
Ceci, tout le monde le sait ;-)
D'autre part, lorsque l'on appelle un objet Doctrine, on peut connaître la valeur de ses différents champs.
Pour reprendre notre exemple :
Ma table my_object dans ma DB a les champs suivants :
- id
- nom
- infos
Mon objet Doctrine correspondant est une Class MyObject. Si on cherche l'enregistrement de "chapitre" avec l'identifiant 5, on écrit :
$chapitre = Doctrine::getTable('MyObject')->find(5);
Si je veux afficher ensuite la valeur des champs, j'écris :
echo $chapitre->getId(); # pour avoir la valeur de l'id (ici:5)
echo $chapitre->getNom(); # pour avoir la valeur du nom (par ex : poire)
echo $chapitre->getInfos(); # vous avez compris ...Bon ...
Maintenant, si on écrit :
echo $chapitre; # seulement ..
on affiche alors : la valeur de l'ID (ici : 5)Car Symfony affiche la valeur de l'ID par défaut ...
De ce fait ...
On a un lien écrit ainsi :
link_to("Aller au chapitre",'chapitre/show?id'.$chapitre->getId());
qui donne le lien : monsite/chapitre/show?id=5Pour simplifier - et parce qu'on connaît Symfony - on a écrit :
link_to("Aller au chapitre",'chapitre/show?id'.$chapitre);
Que se passe t'il alors ?
- Si on N'A PAS redéfini __toString : le lien est valide
- Si on A redéfini __toString comme ci-dessus, on obtient le lien : monsite/chapitre/show?id=poire
... ce qui mène évidemment à une page 404 :-((
Conclusion :
Si on a redéfini la méthode __toString, bien vérifier que l'on a utilisé les formes longues dans nos valeurs (= $chapitre->getId() et non $chapitre tout court)
0 commentaires:
Enregistrer un commentaire