Php 是否可以通过zend url helper重置参数而不传递url选项来获取当前url?
如果我从视图调用$this->url(),我会得到带有参数的url。Ex:/test/view/var1/value1 是否有任何方法可以在不使用参数(var1/value1)和不传递url选项的情况下获取currect url/location: 例如,如果我使用此选项,它会起作用: $this->url(数组(“控制器”=>“测试”、“操作”=>“查看”),null,true); //返回/测试/查看 但我希望避免传递参数 $this->url(array(),null,true)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) 有什么方
有什么方法可以做到这一点吗?没有-路由器(由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。这一点很好,经过编辑以反映您的评论并说明模块。