Zend_Form :: setAction()在Zend Framework中使用当前控制器

时间:2011-10-11 08:16:17

标签: zend-framework zend-form

我声明了一个publisher控制器:

class PublisherController extends Zend_Controller_Action {

    public function indexAction()
    {
        $this->view->form = $this->_getForm();
        $this->render('form');
    }

    public function dataPostAction()
    {
        //@TODO
    }

    protected function _getForm()
    {
        $form = new Zend_Form();            
        $form->setAction('publisher/dataPost')//Here, I DO NOT want to do: setAction('*/dataPost') with `*` means current controller.
             ->setMethod('post')
             ->setAttrib('id','publisher-form');

        $form->addElement('text', 'name',
            array(
                'label'=>'First Name',
                'class'=>'required'
            )
        );        
        $form->addElement('submit', 'Save');        
        return $form;
    }
}

查看以下行:$form->setAction('publisher/dataPost')

这意味着我想在提交dataPost publisher控制器之后为表单设置操作。

现在我想做$form->setAction('*/dataPost') *表示当前控制器。因为当前控制器也是publisher

但它不起作用,或者我错过了什么?你能告诉我什么是正确的吗?

3 个答案:

答案 0 :(得分:1)

publisher/dataPost$form->setAction($this->getRequest()->getControllerName().'/dataPost')更容易打字,因此我建议您坚持使用您已经在做的事情。

答案 1 :(得分:0)

我通常不会在它自己的zend形式中使用它,但最好在使用此代码调用表单时在actions视图中使用它。

<?php echo $this->setAction(url(/.../.../) );?>

这是为了回应您在操作中使用的表单以及设置其操作。所以简而言之就是坚持你所拥有的或使用sam的方法,但我认为如果你有一些准确和有效的方法会更好。

答案 2 :(得分:-1)

我认为comment @Sam对我来说是最好的答案。

使用声明:

$form->setAction($this->getRequest()->getControllerName().'/dataPost')


更新

从这个问题来看,我知道:“不要太复杂”,这里的一些人对上述解决方案并不满意。现在我也得到了这个。但是,对于这个答案,我认为我应该检查并确认什么是正确的。