使用URL参数(symfony)预填充表单的窗口小部件

时间:2010-11-22 13:12:35

标签: php forms symfony1

所有都在标题中。

我得到了URL参数:

$log = $request->getParameter('logement');

Widget的陈述:

$this->widgetSchema['logement'] = new sfWidgetFormInputText();

我在表单中传递它以预先填充我的小部件'logement':

$this->form = new bailForm(array('logement' => $log));

我在symfony的doc中读过它,但是,当我这样做时,我有这个错误:

The "BailForm" form only accepts a "Bail" object.

我已经尝试过在互联网上发现的很多东西,但没有人工作。

修改

ORM是Doctrine “Logement”是“Bail”的一个属性

编辑2

我试过了:

$log = $request->getParameter('logement');

$this->form = new bailForm(null, array('logement' => $log));

我没有错误,但是我的小部件“logement”没有填充......

4 个答案:

答案 0 :(得分:3)

两种方式之一:

<强> 1。如果您想验证Logement

$form = new BailForm(); //BailForm must have Logement validator set
$form->bind(array('logement' => $log) + $otherRequestParameters);
$form->updateObject(); //or save

<强> 2。如果您只想在对象上设置Logement

$bail = new Bail();
$bail->Logement = $log;
$form = new BailForm($bail);

答案 1 :(得分:1)

您的表单是推进或学说形式,构造函数的第一个参数必须是链接的对象实例。试试这个:

$this->form = new bailForm(null, array('logement' => $log));

答案 2 :(得分:0)

基于模型类(在本例中为BailForm的{​​{1}})自动生成的表单属于Bail类型,因此只接受对应的类型的参数模特班。

一个天真的解决方案是为类型sfFormObject声明一个自定义构造函数,它将数组作为单个参数(或数组和Bail类型的对象)。

然而,这不是一个很好的做法,因为模型表单只能用于模型类。这个BailForm参数 - 它对logement对象的意义是什么?也许如果你问自己这个问题,你可以想出一个更合适的设计,可能将Bail作为logement的属性。

答案 3 :(得分:0)

class QuestionsForm extends BaseForm
{

  private static $email;


  public static function setEmail($set) { self::$email = $set; }
  public static function getEmail() { return self::$email; }

  public function configure()
  {   

      $this->setDefault('email', self::$email); 
      //$this->setDefault('email', 'testemail'); 

      //rest of the form setup code
  }

}

这是动作类

class questionsActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {

    $this->email = $this->getRequestParameter('email');

    QuestionsForm::setEmail($this->email);
    //die(QuestionsForm::getEmail());
    $f = new QuestionsForm();

    $this->form = $f;