Php 在symfony中,如何设置表单字段的值?
我正在重写doSave()方法,以便基本上执行以下操作:我有一个sfWidgetFormPropelChoice字段,用户可以从中选择,也可以键入一个新选项。如何更改小部件的值?或者也许我走错了路。下面是我如何重写doSave()方法的:Php 在symfony中,如何设置表单字段的值?,php,mysql,symfony1,propel,Php,Mysql,Symfony1,Propel,我正在重写doSave()方法,以便基本上执行以下操作:我有一个sfWidgetFormPropelChoice字段,用户可以从中选择,也可以键入一个新选项。如何更改小部件的值?或者也许我走错了路。下面是我如何重写doSave()方法的: 你可以在行动中做到: $this->form->getObject()->setFooId($this->foo->getId()) /*Or get the manufacturer id or name from reques
你可以在行动中做到:
$this->form->getObject()->setFooId($this->foo->getId()) /*Or get the manufacturer id or name from request here */
$this->form->save();
但我更喜欢在我的同行中直接与制造商合作,因此我的业务逻辑始终处于同一位置
我在表单中输入的主要是验证逻辑
在对等方的save方法中放置内容的示例:
public function save(PropelPDO $con= null)
{
if ($this->isNew() && !$this->getFooId())
{
$foo= new Foo();
$foo->setBar('bar');
$this->setFoo($foo);
}
}
这里有两个假设:a)您的表单获得制造商的名称,b)您的模型需要制造商的ID
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);
}
您应该使用setDefault或setDefaults,然后它将自动填充绑定值
(sfForm) setDefault ($name, $default)
(sfForm) setDefaults ($defaults)
用法
谢谢你的回复!你将如何在同行中做这项工作?既然它与形式有关,它不应该进入形式吗?对等方没有ID或新名称的表单数据。
(sfForm) setDefault ($name, $default)
(sfForm) setDefaults ($defaults)
$form->setDefault('WidgetName', 'Value');
$form->setDefaults(array(
'WidgetName' => 'Value',
));