Php 以symfony格式将值预加载到字段中,获取错误“;无法更新表单字段";
我有一个表单,它应该在数据库中创建一个非常简单的新条目。此表中的一个字段与另一个表相关。具体来说,有一个人们参加的活动,我需要指派人员参加一个活动。每个活动可以有几个人参加,也可以有几个活动 当管理员用户向事件添加成员时,我不需要他们在实际表单上选择事件,这应该通过URL传递。例如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; 如果我尝试隐藏
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')
));