我有以下代码块:
class MerchantStoreForm extends sfForm
{
public function configure()
{
$this->disableCSRFProtection();
$this->setWidgets(array(
'brand_id' => new sfWidgetFormDoctrineChoice(array('label'=> 'Store Brand','model'=>'Brand','add_empty'=>'-Select Brand-','method'=>'getName','key_method'=>'getId','order_by'=>array('name','asc'))),
'newbrand' => new sfWidgetFormInputCheckbox(array('label' => 'New'),array('value'=>'Y'))
));
$this->setValidators(array(
'newbrand' => new sfValidatorString(array('required'=>false)),
'brand_id' => new sfValidatorDoctrineChoice(array('model'=>'Brand'))
));
$brand = new Brand();
$brand_form = new BrandForm();
$brand_form->widgetSchema['name']->setAttribute('style','display:none');
$this->embedForm('brand', $brand_form);
$this->getWidgetSchema()->setNameFormat('store[%s]');
}
public function execute()
{
$form_values = $this->getValues();
if($form_values['newbrand'])
{
$brand_form = $this->getEmbeddedForm('brand');
$brand_form->save();
$brand = $brand_form->getObject();
}
else
{
$brand = doctrine::getTable('Brand')->findOneById($form_values['brand_id']);
}
return $brand->getId();
}
}
两个问题:
1)$ brand_form-> save()的魔力对我不起作用。我得到一个500内部服务器错误sfValidatorErrorSchema错误指向我的symfony生成的BaseBrandForm.class.php中的以下代码:
...
$this->widgetSchema->setNameFormat('brand[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
...
这取代了替代方案:
$brand_form->updateObject($form_values['brand']);
$brand_form->getObject()->save();
为什么会这样?
2)为什么在对BaseFormDoctrine嵌入表单的对象调用getter方法时会出现未定义的方法错误: 返回$ brand-> getId();
提前感谢您的帮助。
Sharmil
答案 0 :(得分:1)
1)BrandForm会抛出异常,因为它没有任何值。扩展sfFormObject
的类在直接嵌入非对象形式(如sfForm
)时效果不佳。
MerchantStoreForm在做什么?根据具体情况,它可能应该是sfFormObject
,或者BrandForm应该是顶级形式。如果无法做到这一点,则必须向MerchantStoreForm添加一个调用updateObject
和save
的保存方法。为了更好地理解正在发生的事情,请查看sfFormObject
中发生的逻辑 - 特别是如果您使用的是嵌入式表单,则值得了解。
2)这里没有线索。我会看到$ brand实际上是一个实例。如果它是一个记录并且该记录具有id字段,则没有理由不起作用。