Связано с this topic и this other topic Я экспериментирую с проблемой. Это SdrivingMaquinForm.class.php
код:Получить и установить текущее значение из отношения между «maquina» и «emisor»
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_emisor
не так каждый раз, когда я хочу редактировать запись, я получил выбор со значениями, да, но выбранное значение не является правильно, потому что я получаю значение add_empty
. Как я это исправим? Значение, как я назначаю значение по умолчанию для выбора на основе существующего по отношению между maquina
и emisor
?
EDIT: работа на возможное решение
Я пытаюсь этот код:
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_maquina_emisor
для того, чтобы использовать форму setDefault()
метод?
EDIT: doUpdateObject($values)
Смотрите это как моя 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()
?
вы можете посмотреть на моей последнюю правку в главном посте? Я заблудился в функции 'doUpdateObject ($ values)' и код, который вы оставите меня здесь, в вашем ответе – Reynier
неважно, что я выясню, и он работает, большое спасибо и позвольте мне сказать, что ваши предложения очень помогают мне в течение последних дней не только в этом посте, спасибо – Reynier