Zend控制器中url()助手函数的等效方法

14
在Zend视图助手中,有一个名为url()的函数,可以基于路由表输出URL,例如:
$this->url(array('controller' => 'comments', 'action' => 'add')

我怎么在控制器中实现同样的功能?具体来说,我想使用控制器/操作语法设置Zend表单的动作URL,而不是标准URL。

$form = new Zend_Form;
$form->setMethod('post')->setAction( $this->url(array('controller' => 'comments', 'action' => 'add')) );
4个回答

23

这里有一个操作助手:Zend_Controller_Action_Helper_Url。在action控制器内,你可以通过以下方式访问它:

$this->_helper->url($action [, $controller [, $module [, $params]]]);
或:
$this->_helper->url->url(array(...));

或者,您也可以使用视图助手:

$this->view->url(...);

如果我在IndexController之外(例如AjaxController)调用$this->_helper->url(array('controller' => 'index', 'action' => 'download')),它会返回*'/ajax/Array'*。我做错了什么?还是这是一个bug? - lony
2
请使用 $this->_helper->url('download', 'index')$this->_helper->url->url(array('controller' => 'index', 'action' => 'download'))。我会更新我的答案并添加 API 文档链接。 - Ferdinand Beyer

3

我发现只有下面这种方法是有效的:

// in your form
public function init()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $url = $router->assemble(
        array(
            'paramterName0' => 'parameterValue0',
            'paramterName1' => 'parameterValue1',
        ),
        'routeName'
    );

    $this->setAction($url);
    ...
}

2
我能够回答自己的问题,因为下面的代码似乎可以解决问题:
$form = new Zend_Form;
$form->setMethod('post')->setAction( $this->getHelper('url')->url(array('controller' => 'index', 'action' => 'add')) );

1
我现在使用$this->view->url(array('controller' => 'index', 'action' => 'download')),虽然不太好看但是在控制器内可以正常工作。 - lony

1
在zf3中,您可以使用:


    $form = new YourFormClass();
    $form->setMethod('post')->setAction($this->url()->fromRoute(array('controller' => 'index', 'action' => 'add'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接