0

私のaction.class.php

 if ($this->getRequest()->getMethod() == sfRequest::GET) {
                 $this->formShoppingList = new ShoppingListForm(array(
                        'shoppinglist' => $items,
                            ), array('shoppinglist_id' => $list_id));
}

    if ($request->isMethod('post')) {
        $this->formShoppingList->bind($request->getParameter('shoppinglist'));
     print_r($this->fromShoppingList;
    }

私のlib/ShoppingListForm.php:

<?php

class ShoppingListForm extends BaseForm {

public function configure() {
    $shoppinglist_id = $this->getOption('shoppinglist_id');

    $this->setWidgets(array(
        'shoppinglist' => new sfWidgetFormTextarea(array(), array('rows' => '10', 'cols' => '35')),
        'action_id' => new sfWidgetFormInputHidden(array()),
        'list_id' => new sfWidgetFormInputHidden(array(),array('value' => $shoppinglist_id)),
    ));

    $this->widgetSchema->setLabels(array(
        'shoppinglist' => '',
    ));


    $this->setValidators(array(
        'shoppinglist' => new sfValidatorString(array('max_length' => 5000), array(
            'required' => 'ShoppingList is empty.'

        )),

        'action_id' => new sfValidatorString(array('required' => false)),
        'list_id' => new sfValidatorString(array('required' => false))

    ));

    $this->widgetSchema->setNameFormat('shoppinglist[%s]');

    gfFormHelper::addRequiredToLabel($this);
}

}

?>

フォームを送信すると、次のエラーが表示されます。

致命的なエラー: 非オブジェクトでメンバー関数 bind() を呼び出します....

タンパデータ: shoppinglist%5Bshoppinglist%5D=liste+15%0D%0A shoppinglist%5Baction_id%5D=1 shoppinglist%5Blist_id%5D=15

なんで?解決?

4

2 に答える 2

3

リクエストが GET の場合にのみフォームを作成し、リクエストが POST の場合にのみバインドします。問題があります。投稿の場合、フォームはインスタンス化されていないため、$this->formShoppingList は null です。

于 2012-06-10T15:50:24.947 に答える
2

ShoppingListFormその前にのインスタンスを作成する必要がありますbind:

if ($request->isMethod('post'))
{
   // Create instance of ShoppingListForm here
    $this->formShoppingList = new ShoppingListForm();
    $this->formShoppingList->bind($request->getParameter('shoppinglist'));
    if ($this->formShoppingList->isValid())
    {
    // do something with the submitted data
    }
}
于 2012-06-10T15:51:36.787 に答える