1

我目前正在使用 ZF 1.12.2,并且正在使用 URL 操作帮助程序在我的表单上设置操作属性,但操作帮助程序正在执行数组到字符串的转换。我在下面评论了我被退回的内容:

<?php
// application/modules/user/controllers/SignupController.php

class User_SignupController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $form = new User_Form_Signup();

        // This gives me 'user/signup/Array'
        $signup_url = $this->_helper->url(array(
            'module' => 'user',
            'controller' => 'signup',
            'action' => 'register'
        ));

        // This gives me 'user/signup/register', which is what I want
        $signup_view_url = $this->view->url(array(
            'module' => 'user',
            'controller' => 'signup',
            'action' => 'register'
        ));

        $form->setAction(...);
    }

    public function registerAction()
    {

    }
}

我真的不明白为什么会这样。我已经检查了 Zend_Controller_Action_Helper_Url 和 Zend_View_Helper_Url 并且它们的方法是相似的:

// get the front controller's router
$router = Zend_Controller_Front::getInstance()->getRouter(); 

// assemble the route
return $router->assemble($urlOptions, $name, $reset, $encode);

我刚刚发现了Zend_Controller_Action_Helper_Url::simple可以解决我需求的中间问题,但我仍然对上面返回的内容感到困惑和好奇。

路由器如何使用相同的参数从对同一对象的方法的两个单独调用中组装两条完全不同的路由(一个完全错误)?到目前为止,我还没有在引导程序和配置中添加任何路由。

4

1 回答 1

3

调用$this->_helper->url实际上返回类。当您以这种方式使用参数调用操作助手时,参数将传递给该direct()助手的方法。在这种情况下,该direct()方法最多需要三个参数,其中第一个应该是操作名称。因此,您遇到问题的原因是帮助程序期望提供一个动作名称,但您提供的是一个数组。

您真正想要的是调用url()助手上的方法:

$this->_helper->url->url(array(
    'module' => 'user',
    'controller' => 'signup',
    'action' => 'register'
));

就个人而言,我通常使用“其他”语法在控制器中调用动作助手:

$this->getHelper('url')->url(array(
    'module' => 'user',
    'controller' => 'signup',
    'action' => 'register'
));

我觉得更清楚一点。

于 2013-03-14T09:24:28.437 回答