Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在symfony中,如何设置表单字段的值?_Php_Mysql_Symfony1_Propel - Fatal编程技术网

Php 在symfony中,如何设置表单字段的值?

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

我正在重写doSave()方法,以便基本上执行以下操作:我有一个sfWidgetFormPropelChoice字段,用户可以从中选择,也可以键入一个新选项。如何更改小部件的值?或者也许我走错了路。下面是我如何重写doSave()方法的:


你可以在行动中做到:

$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',
));