$this->job = Doctrine_Core::getTable('JobeetJob')->execute();
ne récupère certainement pas un job précis. Je n'ai jamais appelé execute() sous cette forme, il y a peut-être des arguments par défaut mais il lui faut en principe au moins une requête. Dans le meilleur des cas elle te retourne le premier enregistrement de ta collection - ou quelque chose du genre - donc pas forcément le bon.
Dans une action, si tu connais l'id de ton job, tu vas plutôt le récupérer avec quelque chose du genre :
$job = JobeetJobTable::getInstance()->find($id)
ou dans le cas qui nous intéresse :
$job = Doctrine_Core::getTable('JobeetJob')->find($id)
Pour avoir l'id de ton job tel qu'elle a été déclarée dans l'url, tu interroges ta requête, par exemple :
$id = $request->getGetParameter('id')
Or
1 - la route que tu as déclarée dans ton fichier routing.yml est du type sfDoctrineRoute, qui descend de sfObjectRoute. Cette dernière classe sait qu'elle traite une url associée un objet de type JobeetJob :
options: { model: JobeetJob, type: object }
2 - L'identifiant d'un JobeetJob est le champ 'id' (cf. la déclaration dans le schema.yml) et la sfObjectRoute sait où trouver ce champ dans l'url :
url: /job/:company_slug/:location_slug/:id/:position_slug
Elle a donc tous les éléments pour instancier l'objet associé à l'url.
Partager