Php 是否可以通过zend url helper重置参数而不传递url选项来获取当前url?

Php 是否可以通过zend url helper重置参数而不传递url选项来获取当前url?,php,zend-framework,Php,Zend Framework,如果我从视图调用$this->url(),我会得到带有参数的url。Ex:/test/view/var1/value1 是否有任何方法可以在不使用参数(var1/value1)和不传递url选项的情况下获取currect url/location: 例如,如果我使用此选项,它会起作用: $this->url(数组(“控制器”=>“测试”、“操作”=>“查看”),null,true); //返回/测试/查看 但我希望避免传递参数 $this->url(array(),null,true) 有什么方

如果我从视图调用$this->url(),我会得到带有参数的url。Ex:/test/view/var1/value1

是否有任何方法可以在不使用参数(var1/value1)和不传递url选项的情况下获取currect url/location:

例如,如果我使用此选项,它会起作用:

$this->url(数组(“控制器”=>“测试”、“操作”=>“查看”),null,true); //返回/测试/查看

但我希望避免传递参数

$this->url(array(),null,true)


有什么方法可以做到这一点吗?

没有-路由器(由url视图帮助程序调用)用来生成链接的
Zend\u Controller\u Request\u Http
对象并不能真正区分模块/控制器/动作参数和动作可能使用的其他参数

使用上面引用的第一种形式,或者如果需要适用于每个操作/控制器的解决方案,请创建如下内容:

class MyApplication_Controller_Action_Base extends Zend_Controller_Action {
    public function preDispatch() {
        //Generate a URL to the module/controller/action 
        //(without any other parameters)
        $this->view->bareUrl = $this->view->url(
            array_intersect_key(
                $this->getRequest()->getParams(),
                array_flip(array('module','view','controller')
            ),
            null,
            true
        );
    }
}

在任何视图中,您都可以使用

而不是真正意义上的-路由器(由url视图帮助程序调用)用于生成链接的
Zend\u Controller\u Request\u Http
对象并不真正区分模块/控制器/操作参数和您的操作可能使用的其他参数

使用上面引用的第一种形式,或者如果需要适用于每个操作/控制器的解决方案,请创建如下内容:

class MyApplication_Controller_Action_Base extends Zend_Controller_Action {
    public function preDispatch() {
        //Generate a URL to the module/controller/action 
        //(without any other parameters)
        $this->view->bareUrl = $this->view->url(
            array_intersect_key(
                $this->getRequest()->getParams(),
                array_flip(array('module','view','controller')
            ),
            null,
            true
        );
    }
}

在任何视图中,都可以使用

这听起来像是视图助手的工作。像这样的

class Zend_View_Helper_Shorturl {

    public function shorturl() {
        $request = Zend_Controller_Front::getInstance()->getRequest();
        $module = $request->getModuleName();
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        return $this->view->url(array('module'=>$module, 'controller'=>$controller,'action'=>$action), null, true);
        //return "/$controller/$action"; //Left this in incase it works better for you.

    }
}  
然后您只需编写
$this->shorturl()在您的视图中

为了清楚起见,这将进入
scripts/helpers/Shorturl.php

编辑: 事实上,我刚刚试过这个,它很有效。我认为这是一个解决方案

class Zend_View_Helper_Shorturl {

    public function shorturl() {
        return $this->view->url(array('module'=>$module, 'controller'=>$controller,'action'=>$action), null, true);
    }
}

这听起来像是视图助手的工作。像这样的

class Zend_View_Helper_Shorturl {

    public function shorturl() {
        $request = Zend_Controller_Front::getInstance()->getRequest();
        $module = $request->getModuleName();
        $controller = $request->getControllerName();
        $action = $request->getActionName();
        return $this->view->url(array('module'=>$module, 'controller'=>$controller,'action'=>$action), null, true);
        //return "/$controller/$action"; //Left this in incase it works better for you.

    }
}  
然后您只需编写
$this->shorturl()在您的视图中

为了清楚起见,这将进入
scripts/helpers/Shorturl.php

编辑: 事实上,我刚刚试过这个,它很有效。我认为这是一个解决方案

class Zend_View_Helper_Shorturl {

    public function shorturl() {
        return $this->view->url(array('module'=>$module, 'controller'=>$controller,'action'=>$action), null, true);
    }
}

只需使用$this->url()获取浏览器url中显示的baseUrl/控制器,例如,如果您的it是www.your-domain.ro/project/members,它将返回project/members

只需使用$this->url()要获得浏览器URL中显示的baseUrl/控制器,例如,如果您的it是www.your-domain.ro/project/members,它将返回project/members

我认为这几乎是一个比上面我的解决方案更好的解决方案,因为它仅在使用时才被调用。但是,最后一行应该是
return$this->view->url(数组('controller'=>$controller,'action'=>$action),null,true),因为默认路由器可能不使用
/controller/action
表单中的URL。这一点很好,经过编辑以反映您的评论并考虑模块。我想说,这几乎是一个比我上面提到的更好的解决方案,因为它仅在使用时才被调用。但是,最后一行应该是
return$this->view->url(数组('controller'=>$controller,'action'=>$action),null,true),因为默认路由器可能不使用
/controller/action
表单中的URL。这一点很好,经过编辑以反映您的评论并说明模块。