我确信我会以错误的方式解决这个问题,但我需要从sfWidgetFormChoice中的一个选项中取消设置一个数组键。将该变量赋予Form的唯一方法是从操作中获取。这就是我所拥有的:
动作:
$id = $request->getParameter('id');
$deleteForm = new UserDeleteForm();
$choices = array();
$choices = $deleteForm->getWidgetSchema('user')->getAttribute('choices');
unset($choices[$id]); //I obviously don't want the user to be able to transfer to the user being deleted
$this->deleteForm = $deleteForm;
形式:
$users = Doctrine_Core::getTable('sfGuardUser')->getAllCorpUsers()->execute();
$names = array();
foreach($users as $userValue){
$names[$userValue->getId()] = $userValue->getProfile()->getFullName();
};
// unset($names[$id]); //this works, but I can't figure out how to get $id here.
$this->widgetSchema['user'] = new sfWidgetFormChoice(array(
'choices' => $names
));
$this->validatorSchema['user'] = new sfValidatorChoice(array(
'required' => true,
'choices' => $names
));
答案 0 :(得分:3)
了解表单和操作:
通常我们会设置一个带有字段的表单,将其打印在html页面中并用数据填充表单。按提交表单按钮会将所有数据发送到表单action
html属性中定义的方法。
该方法将接收并获得具有大量参数的$request
以及具有数据的表单。这些值将在动作中处理。
让我们看看它在symfony中是如何工作的:
定义和设置symfony表单,就像上面显示的那样。 打印表单并在action参数中指向submit方法 将收到请求:
<form action="currentModuleName/update"
Symfony会自动将请求发送到action.class.php
您的模块,并将查找并将数据发送到该功能
的 executeUpdate
强>
public function executeUpdate(sfWebRequest $ request){
// ... $ this-&gt; form = new TestForm($ doctrine_record_found);
$ this-&gt; processForm($ request,$ this-&gt; form);
}
经过一些检查后,symfony将处理表单并设置结果
模板。
processForm(sfWebRequest $ request,sfForm $ form) {...}
$ this-&gt; setTemplate('edit');
在模块processForm
的{{1}}中,您应该使用以下格式处理所有收到的值(请求):
action.class.php
您可以查看以下link以获取与您类似的示例,了解如何处理 protected function processForm(sfWebRequest $request, sfForm $form)
{
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
if ($form->isValid())
{
$formValues = $this->form->getValues();
$Id = $formValues['yourWidgetName'];
}
}
。
现在回答真正的问题,为了选择已删除的用户,请在您的操作中添加以下代码:
sfWidgetFormChoice
将变量从操作传递到表单:
对不起,如果我根本不理解您的问题,但是如果您需要将某些参数从您的操作传递到表单,请将数组中的初始化变量发送到表单构造函数:
Pass a variable to a Symfony Form
在您的情况下,获取用户列表,删除您不想要的用户,并将未删除的用户发送到表单构造函数。
您需要在configure()函数中重新声明/覆盖您的表单,以便您可以更改表单的初始化。将相同的代码复制并粘贴到configure()函数中并注释line:// parent :: setup();
//process the form, bind and validate it, then get the values.
$formValues = form->getValues();
$choicesId = $formValues['choices'];