Php 以symfony格式将值预加载到字段中,获取错误“;无法更新表单字段";

Php 以symfony格式将值预加载到字段中,获取错误“;无法更新表单字段";,php,forms,symfony1,doctrine,relational-database,Php,Forms,Symfony1,Doctrine,Relational Database,我有一个表单,它应该在数据库中创建一个非常简单的新条目。此表中的一个字段与另一个表相关。具体来说,有一个人们参加的活动,我需要指派人员参加一个活动。每个活动可以有几个人参加,也可以有几个活动 当管理员用户向事件添加成员时,我不需要他们在实际表单上选择事件,这应该通过URL传递。例如 event/new/id/1 然而,我真的很难在表单中包含该ID。如果我尝试手动设置字段值,则会出现错误无法更新表单字段 e、 g $this->['attendanceSuccess_id']=1; 如果我尝试隐藏

我有一个表单,它应该在数据库中创建一个非常简单的新条目。此表中的一个字段与另一个表相关。具体来说,有一个人们参加的活动,我需要指派人员参加一个活动。每个活动可以有几个人参加,也可以有几个活动

当管理员用户向事件添加成员时,我不需要他们在实际表单上选择事件,这应该通过URL传递。例如
event/new/id/1

然而,我真的很难在表单中包含该ID。如果我尝试手动设置字段值,则会出现错误
无法更新表单字段
e、 g

$this->['attendanceSuccess_id']=1; 如果我尝试隐藏该字段:

$this->widgetSchema['attendanceSuccess_id'] = new sfWidgetFormInputHidden(); $this->widgetSchema['attendanceSuccess_id']=new sfwidgetforminpurthidden(); 表单显示了,但显然没有传递任何值,我得到“thatfields is required error”


这似乎是一件非常简单和常见的事情,但我找不到任何解决方案!如何将URL值传递到字段指向另一个类的表单中?

以下是我所做的。基本上,您的表单包含一个隐藏的id,您的操作从请求中获取该id,并将其作为选项放入表单中。在表单中,您还可以设置与条令对象的关系

你的表单应该有这样的内容(我不知道你的表单应该扩展什么,因为你使用的是教义,而我的是推进)

然后你的行动是:

$this->form = new SomethingForm(null, array(
'person_id' => $request->getParameter('person_id')
));

为什么要重写这个构造函数?最初我之所以这样做是因为它是一个必需的选项(例如person_id),如果它不在那里,我就会抛出一个异常(但在粘贴它时我删除了代码的这一部分)。我的表单必须具有该选项才能正常工作,因此我希望它位于构造函数中,以确保没有该选项表单无法存在。在其他地方,我也使用了一个setter,我在操作中使用它,比如
$this->form->setPersonId($request->getParameter('person\u id'))
。你有偏好吗?这两种方法对我来说都很好,这取决于选项的重要性和代码的干净程度。
class SomethingForm extends BaseSomethingForm {

public function __construct($object = null, $options = array(), $CSRFSecret = null)
{
    parent::__construct($object, $options, $CSRFSecret);
    if (isset($options['person_id']))
    {
        $this->getObject()->setPersonId($options['person_id']);
        $this->setDefault('person_id', $options['person_id']);
    }

}
}

public function configure()
{
    $this->setWidget('person_id', new sfWidgetFormInputHidden());
...more stuff...
}
$this->form = new SomethingForm(null, array(
'person_id' => $request->getParameter('person_id')
));