Symfony, nasıl bir form alanının değerini ayarlamak için?

3 Cevap php

Ben temelde aşağıdakileri yapın benim DoSave () yöntemini geçersiz ediyorum: Ben kullanıcı seçin veya yeni bir seçenek yazabilirsiniz ya bir sfWidgetFormPropelChoice alan var. Nasıl Widget'in değerini değiştirebilir? Ya da belki bu yanlış şekilde yaklaşıyorum. Yani burada ben DoSave () yöntemi overrode nasıl:

public function doSave($con = null)
{
	// Save the manufacturer as either new or existing.
	$manufacturer_obj = ManufacturerPeer::retrieveByName($this['manufacturer_id']->getValue());
	if (!empty($manufacturer_obj))
	{
		$this->getObject()->setManufacturerId($manufacturer_obj->getId()); // NEED TO CHANGE THIS TO UPDATE WIDGET'S VALUE INSTEAD?
	}
	else
	{
		$new = new Manufacturer();
		$new->setName($this['manufacturer_id']->getValue());
		$new->save();
		$this->getObject()->setManufacturerId($new->getId()); // NEED TO CHANGE THIS TO UPDATE WIDGET'S VALUE INSTEAD?
	}

	parent::doSave($con);
}

3 Cevap

Siz SetDefault veya SetDefaults kullanmak gerekir ve daha sonra bağlı değerlerle autopopulate olacaktır.

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

kullanım

$form->setDefault('WidgetName', 'Value');
$form->setDefaults(array(
    'WidgetName' => 'Value',
));

Sen eylem yapabileceğini:

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

Ama çok benim iş mantığı aynı yerde her zaman benim Peer doğrudan üretici ile yaptığınız çalışmanın tür yapmak için tercih ediyor.

Ne benim formlarda koymak esas doğrulama mantıktır.

Peer tasarruf yöntemi koymak için ne örnek:

public function save(PropelPDO $con= null)
{
  if ($this->isNew() && !$this->getFooId())
  {
    $foo= new Foo();
    $foo->setBar('bar');
    $this->setFoo($foo);
   } 
}

Burada iki varsayım: a) form üreticisinin adını alır ve b) modeli bir üretici kimliğini istiyor

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);
}