Symfony1 从“之间的关系”中获取并设置当前值;马奎纳“;及;“排放者”;
我正在试验一个问题。这是Symfony1 从“之间的关系”中获取并设置当前值;马奎纳“;及;“排放者”;,symfony1,symfony-1.4,Symfony1,Symfony 1.4,我正在试验一个问题。这是SdrivingMaquinForm.class.php代码: class SdrivingMaquinaForm extends BaseSdrivingMaquinaForm { protected $current_user; public function configure() { $this->current_user = sfContext::getInstance()->getUser()->getGu
SdrivingMaquinForm.class.php
代码:
class SdrivingMaquinaForm extends BaseSdrivingMaquinaForm {
protected $current_user;
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', 'table_method' => 'fillChoice'));
$this->validatorSchema['idempresa'] = new sfValidatorPass();
$this->validatorSchema['no_emisor'] = new sfValidatorPass();
}
protected function doUpdateObject($values) {
parent::doUpdateObject($values);
if (isset($this['no_emisor'])) {
if ($this->isNew()) {
$sdrivingMaquinaEmisor = new SdrivingMaquinaEmisor();
$this->getObject()->setSdrivingMaquinaEmisor($sdrivingMaquinaEmisor);
} else {
$sdrivingMaquinaEmisor = $this->getObject()->getSdrivingMaquinaEmisor();
}
$sdrivingMaquinaEmisor->setIdemisor($this->values['no_emisor']);
}
}
}
如果我创建一个新的maquina
值保存正确,如果我再次编辑一个现有记录,值保存正确,如果我删除一个记录,那么关系也会被删除。因此,问题不在于行动或方法。我遇到的问题是,当用户选择编辑现有记录时。字段idempresa
和patente
(请参阅此处第一篇博文中的schema.yml)获取其值,但no\u emissor
并非如此,因此每次我要编辑记录时,我都会使用值进行选择,是的,但所选值不正确,因为我获取了add\u empty
值。我怎么解决这个问题?这意味着我如何根据maquina
和emisor
之间的关系中存在的值为select分配默认值
编辑:制定可能的解决方案
我正在尝试以下代码:
public function executeEdit(sfWebRequest $request) {
$this->forward404Unless($sdriving_maquina = Doctrine_Core::getTable('SdrivingMaquina')->find(array($request->getParameter('idmaquina'))), sprintf('Object sdriving_maquina does not exist (%s).', $request->getParameter('idmaquina')));
$this->forward404Unless($sdriving_maquina_emisor = Doctrine_Core::getTable('SdrivingMaquinaEmisor')->find(array($request->getParameter('idmaquina'))), sprintf('Object sdriving_maquina_emisor does not exist (%s).', $request->getParameter('idmaquina')));
$this->form = new SdrivingMaquinaForm($sdriving_maquina, $sdriving_maquina_emisor);
}
但是,如何在configure()
方法中访问$sdriving\u maquina\u emissor
以使用表单setDefault()
方法
编辑:doUpdate对象($value)
这是我的doUpdateObject($values)
函数的外观:
protected function doUpdateObject($values) {
parent::doUpdateObject($values);
if (isset($this['no_emisor'])) {
if ($this->isNew()) {
$sdrivingMaquinaEmisor = new SdrivingMaquinaEmisor();
$this->getObject()->setSdrivingMaquinaEmisor($sdrivingMaquinaEmisor);
} else {
$sdrivingMaquinaEmisor = $this->getObject()->getSdrivingMaquinaEmisor();
}
$sdrivingMaquinaEmisor->setIdemisor($this->values['no_emisor']);
}
}
您留给
doUpdateObject()
?的代码的确切位置在这些情况下,您始终需要做两件事:
- 将默认值从条令记录对象加载到表单小部件中
- 使用发布的值更新条令对象
updateDefaultsFromObject
和doUpdateObject
要加载回保存的值,请执行以下操作:
你能看一下我在主帖上的最新编辑吗?我对
doUpdateObject($values)
函数和您留给我的答案中的代码感到迷茫。不要紧,我知道了,它正在工作,非常感谢,让我说,您的建议在过去的几天里对我帮助很大,不仅仅是在这篇文章中,谢谢
// maybe you have to declare it as public if the parent class requires that
protected function updateDefaultsFromObject()
{
parent::updateDefaultsFromObject();
if (isset($this['no_emisor'])
{
$this->setDefault('no_emisor', $this->getObject()->getSdrivingMaquinaEmisor()->getIdemisor());
}
}
// and you can simplify this a little bit as well
protected function doUpdateObject($values)
{
parent::doUpdateObject($values);
if (isset($this['no_emisor']))
{
$this->getObject()->getSdrivingMaquinaEmisor()->setIdemisor($this->values['no_emisor']);
}
}