在表单外设置提交名称

时间:2011-09-30 15:18:47

标签: zend-framework zend-form

我有一个用于更新和插入数据的zend_form。 我希望它有不同的sumbit标签,但它似乎不起作用。 我的表格:

class Staff_Form extends Zend_Form
{
    public function init()
    {
        $this->setAction('')
                ->setMethod('post');

        $firstname = new Zend_Form_Element_Text('firstname');
        $firstname->setLabel('firstname')->setRequired(true);

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setName('insert');

        $this->addElements(array(
            $firstname,
            $submit
        ));
    }
}

现在我希望这可行:

//in controller
$form = new My_Form();
$form->getElement('submit')->setName('update');

但它给出了一个致命的错误: 致命错误:在.....中的非对象上调用成员函数setName() 所以我试过了:

$first = $form->getElement('firstname');
var_dump($first);
echo 'html break';
$submit = $form->getElement('submit');
var_dump($submit);
die();

看来$ submit为NULL

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在您的代码中某处确实应该输入错误,我只是测试了以下哪个有效:

class Application_Form_Test extends Zend_Form
{
  public function init()
  {
    $sub = new Zend_Form_Element_Submit('submit');
    $sub->setLabel('Submit Me');

    $this->addElement($sub);
  }
}

//controller - It works
$form = new Application_Form_Test();
$sub = $form->getElement('submit');
$sub->setName('wahahahar');

答案 1 :(得分:1)

您可以在设置表单时传递提交值。

// form
class App_Form_Something extends Zend_From {
  protected $submitName

public function init() {
  $this->addElement('submit',$this->submitName, array(
    'label' => $this->submitName
  ));

public function setSubmitName($submitName) {
  $this->submitName = $submitName;
}
}

然后在您的控制器中

$form = new App_Form_Something(array('submitName' => 'Update or something'));

我经常使用这种技术来传递某些数据库对象的Id,以便它们可以自动填充等。

祝你好运