Форма Symfony становится грязной при вызове getObject () в конфигурации формы - PullRequest
0 голосов
/ 30 июня 2011

У меня есть модель Штамма, которая имеет отношение относится к с моделью образца, т.е. е. штамм принадлежит образцу.

Я настраиваю скрытое поле в методе StrainForm configure() следующим образом:

$defaultId = (int)$this->getObject()->getSample()->getTable()->getDefaultSampleId();
$this->setWidget('sample_id', new sfWidgetFormInputHidden(array('default' => $defaultId)));

Всякий раз, когда я создаю новый штамм, $form->save() терпит неудачу. Панель инструментов отладки показала, что сначала пытается сохранить объект Sample, и я не знаю почему.

Однако, если я получу идентификатор образца по умолчанию, используя таблицу, он будет работать как шарм:

$defaultId = (int)Doctrine_Core::getTable('Sample')->getDefaultSampleId();
$this->setWidget('sample_id', new sfWidgetFormInputHidden(array('default' => $defaultId)));

Мой вопрос здесь заключается в том, что может происходить с последовательностью методов getObject()->getSample()..., которая заставляет StrainForm думать, что он должен сохранить объект Sample вместо Strain.

Я пытался отладить xdebug, но не могу прийти к четкому выводу.

Есть мысли?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Когда вы вызываете getSample, создается экземпляр Sample. Он автоматически прикрепляется к объекту "Штамм", поэтому при сохранении вы также сохраняете образец.

Альтернативой для вызова getSample будет цепочка через объект Strain к таблице Sample, поскольку я предполагаю, что вы делаете это только потому, что вы не жестко закодировали имя Sample в связанной форме:

// note Sample is the alias not necessarily the Model name
$defaultId = Doctrine_Core::getTable($this->getObject()->getTable()->getRelation('Sample')->getModel())->getDefaultId(); 
0 голосов
/ 30 июня 2011

Ваше решение, вероятно, падает, потому что вы не можете использовать getObject () в новой форме (так как на этом этапе объект просто не существует).

Edit: Почему бы вам не передать образец Sample по умолчанию через массив параметров, а затем получить к нему доступ из класса формы через $ this-> getOption ('Sample') (если я правильно помню)?

...