如何将变量从动作传递到表单

时间:2013-06-24 18:14:32

标签: php symfony-1.4

我确信我会以错误的方式解决这个问题,但我需要从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
    ));

1 个答案:

答案 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'];