views:

30

answers:

2
THIS QUESTION IS NOT ABOUT HOW TO SET DEFAULT VALUE OF A WIDGET

Hello Symfonians! I had a fundamental doubt about forms, Im putting 2 scenarios below.

I have a customModelForm that extends a modelForm. 1> If I do not specify a default value for a form field new: field is empty edit: field shows the value in the object 2> If I specify a default value for a field, new: field shows default value edit: field shows default value

I am trying to avoid the EDIT mode behaviour in scenario 2. The default value should only be displayed when the value in the object is not set.

I am calling parent::configure after setting the default value. Do we have any control on the 'bind' event?

Thanks

+1  A: 

First of all, call parent::configure() first in your configure() method. That way you don't run the risk of your configuration being overwritten by the parent configuration.

You can set defaults based on the model's status by doing something like the following in your configure() method:

if ($this->getObject()->isNew())
{
  // do something here but only if the object is new
}
else
{
  // the object is being edited
}
richsage
thanks.do you think this should be taken care of by the framework? does anybody need to display default values even when the value is set in the object?
Prasad
+1  A: 

This shouldn't be happening, at least in Doctrine. The part of the code where this is happening is in updateDefaultsFromObject in sfFormDoctrine. The relevant lines are:

if ($this->isNew())
{
  $defaults = $defaults + $this->getObject()->toArray(false);
}
else
{
  $defaults = $this->getObject()->toArray(false) + $defaults;
}

updateDefaultsFromObject does net get called until the entire configure chain is done, so something else must be going on here.

Are you using Doctrine? Are you using the most current version of Symfony (there was a bug here a while ago)? Are you sure the default is getting set in the configure method of your form?

The isNew check richsage is recommending should be avoided. There is a larger issue here as the proper behavior is for default value to get overwritten by an existing object's values.

jeremy
Yes. Im using Doctrine 1.2. But I'm on Symfony 1.4 April version. I really need to upgrade!
Prasad