我的表单中有configure()
函数:
public function configure() {
$this->current_user = sfContext::getInstance()->getUser()->getGuardUser();
unset($this['updated_at'], $this['created_at']);
$this->widgetSchema['idempresa'] = new sfWidgetFormInputHidden();
$id_empresa = $this->current_user->getSfGuardUserProfile()->getIdempresa();
$this->setDefault('idempresa', $id_empresa);
$this->widgetSchema['no_emisor'] = new sfWidgetFormDoctrineChoice(array('model' => 'SdrivingEmisor', 'add_empty' => 'Seleccione un Emisor', 'expanded' => false, 'multiple' => false));
$this->validatorSchema['idempresa'] = new sfValidatorPass();
$this->validatorSchema['no_emisor'] = new sfValidatorPass();
}
我需要在save()
函数中定义关系数据,所以我这样做:
public function save($con = null) {
$new_machine = parent::save($con);
$relation = new SdrivingMaquinaEmisor();
$relation->setIdmaquina($new_machine);
$relation->setIdemisor();
$relation->save();
return $new_machine;
}
为了设置Idemisor
,如何在用户提交表单时访问所选值?这是实现这一目标的最佳方式吗?
修改
现在,我采取了关于如何访问no_emisor
值的建议,我的代码如下:
public function save($con = null) {
$new_machine = parent::save($con);
$relation = new SdrivingMaquinaEmisor();
$relation->setIdmaquina($new_machine);
$relation->setIdemisor($this->values['no_emisor']);
$relation->save();
return $new_machine;
}
但是我收到了这个错误:
SQLSTATE [23000]:完整性约束违规:1048列'idmaquina'不能为空
由于某种原因,$new_machine
不会返回最新保存元素的id
。也许我的做法是错误的,所以我做错了什么?
答案 0 :(得分:1)
我认为您可能希望在表单doUpdateObject
中执行此操作,因为它会收到已清理的值。
http://www.symfony-project.org/api/1_4/sfFormObject#method_doupdateobject
编辑:
或者,$this->values['no_emisor']
应该在表单绑定后起作用。