It happen sometimes that you have to set/override a value within a form but without using a hidden field (that can be overridden)
Here is a short solution to set the user id in the object we are going to save.
Let's say that we have an object PersonnalData linked to the sfGuardUserProfile
In your PersonnalDataForm.class.php :
class PersonnalDataForm extends BasePersonnalDataForm { public function configure() { } //public function processValues($values = null) { // only in 1.2 public function processValues($values) { // 1.3 - 1.4 $values['user_id'] = $this->getOption('user_id'); return parent::processValues($values); } }
$this->getOption('user_id')
is a mechanism to pass variables from outside the form to it. To set it, you must use the second argument of the form's constructor.
In your action :
public function executeMyaction(sfWebRequest $request) { // setting an array containg the variable we want to use in our form $this->form = new PersonnalDataForm(null, array('user_id' => $this->getUser()->getProfile()->getId() )); if($request->isMethod('post')) { $this->form->bind($request->getParameter($this->form->getName())); if($this->form->isValid()) { $this->form->save(); } else { //echo 'not valid'; } } }
1 De Mysterty -
Merci,
J'avais besoin d'un rafraîchissement sur ce sujet :)