В симфонии, как установить значение поля формы?

(См. обновленный ответ за 2016 год )

Я думаю, что вполне разумно хотеть выполнить действие, подождать, а затем выполнить другое действие. Если вы привыкли писать на многопоточных языках, у вас, вероятно, есть идея дать выполнение за определенное время, пока ваш поток не проснется.

Проблема здесь в том, что JavaScript является однопоточной моделью, основанной на событиях. Хотя в конкретном случае было бы неплохо подождать всего несколько секунд весь двигатель, в целом это плохая практика. Предположим, я хотел использовать ваши функции, когда писал свои собственные? Когда я вызывал твой метод, все мои методы зависали. Если JavaScript может каким-то образом сохранить контекст выполнения вашей функции, сохранить его где-нибудь, затем вернуть обратно и продолжить позже, тогда может произойти сон, но это в основном будет потоковым.

Таким образом, вы в значительной степени застряли на том, что предлагали другие, - вам нужно разбить код на несколько функций.

Тогда ваш вопрос немного ошибочен. Нельзя спать так, как вы хотите, и вы не должны следовать предложенному вами решению.

5
задан James Skidmore 22 June 2009 в 22:02
поделиться

3 ответа

Вы должны использовать setDefault или setDefaults, и тогда он будет автоматически заполнен со связанными значениями.

(sfForm) setDefault ($name, $default)
(sfForm) setDefaults ($defaults)

использование

$form->setDefault('WidgetName', 'Value');
$form->setDefaults(array(
    'WidgetName' => 'Value',
));
9
ответ дан 13 December 2019 в 05:41
поделиться

Вы можете сделать это в действии:

$this->form->getObject()->setFooId($this->foo->getId()) /*Or get the manufacturer id or name from request here */
$this->form->save();

Но я предпочитаю выполнять ту работу, которую вы выполняете со своим производителем, прямо в моем узле, поэтому моя бизнес-логика всегда остается в одном месте.

То, что я поставил в моих формах в основном используется логика проверки.

Пример того, что нужно вставить в метод сохранения Peer:

public function save(PropelPDO $con= null)
{
  if ($this->isNew() && !$this->getFooId())
  {
    $foo= new Foo();
    $foo->setBar('bar');
    $this->setFoo($foo);
   } 
}
2
ответ дан 13 December 2019 в 05:41
поделиться

Здесь два предположения: а) ваша форма получает имя производителя и б) вашей модели требуется идентификатор производителя

public function doSave($con = null)
{
    // retrieve the object from the DB or create it
    $manufacturerName = $this->values['manufacturer_id'];
    $manufacturer = ManufacturerPeer::retrieveByName($manufacturerName);
    if(!$manufacturer instanceof Manufacturer)
    {
        $manufacturer = new Manufacturer();
        $manufacturer->setName($manufacturerName);
        $manufacturer->save();
    }

    // overwrite the field value and let the form do the real work
    $this->values['manufacturer_id'] = $manufacturer->getId();

    parent::doSave($con);
}
1
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: