Je suis assez nouveau à symfony et j'ai 2 champs relatifs à ma table "Pages"; created_by et updated_by. Ils sont liés à la table users (sfGuardUser) en tant que clés étrangères. Je veux que ceux-ci soient cachés des formes d'édition/nouvelles, donc je l'ai mis en place le fichier generator.yml pour ne pas afficher ces champs:Symfony: Comment masquer les champs de formulaire de l'affichage, puis définir les valeurs pour eux dans la classe d'action
form:
display:
General: [name, template_id]
Meta: [meta_title, meta_description, meta_keywords]
Maintenant je dois définir les champs de la sauvegarde. J'ai cherché comment faire cela toute la journée et essayé une centaine de méthodes. La méthode que j'ai travaillé est la suivante, dans la classe des actions:
protected function processForm(sfWebRequest $request, sfForm $form)
{
$form_params = $request->getParameter($form->getName());
$form_params['updated_by'] = $this->getUser()->getGuardUser()->getId();
if ($form->getObject()->isNew()) $form_params['created_by'] = $this->getUser()->getGuardUser()->getId();
$form->bind($form_params, $request->getFiles($form->getName()));
Cela fonctionne donc. Mais j'ai l'impression que, idéalement, je ne devrais pas modifier la requête web, mais plutôt modifier le formulaire/l'objet directement. Cependant, je ne ai pas eu de succès avec des choses comme:
$form->getObject()->setUpdatedBy($this->getUser()->getGuardUser());
Si quelqu'un pouvait offrir des conseils sur les meilleures façons de résoudre ce type de problème, je serais très reconnaissant.
Merci, Tom
Blameable est exactement ce dont j'ai besoin, merci un million - et y compris la page en cache aussi - légende. Incidemment, votre solution n'aurait pas fonctionné pour moi car les champs created_by/updated_by sont des clés étrangères et $ form-> save() ne laisseront pas passer les valeurs nulles. – Tom