我是ZF3的noobie,我们在基于codeigniter的主应用程序中放置了基于zend的管理面板。喜欢以下方式
my_app/zend_admin/
|
|
--- config
--- module
--- public
我可以使用www.my_app.com/zend_admin/my_zend_controller/my_zend_action
访问zend模块。
我想访问www.my_app.com/my_ci_controller/my_ci_action
。
是否提供了zend提供的方法,因为ci提供了base_url()所以我可以获取我的ci控制器?
答案 0 :(得分:1)
获取基本URL你可以使用 serverUrl view helper (比如在codeigniter base_url()中)
$this->serverUrl(); // return http://web.com OR
$this->serverUrl('/uri'); // return http://web.com/uri
我不确定你的设置,但试试......
答案 1 :(得分:0)
使用ZF微工具可以通过多种方式完成这项工作。
像CodeIgniter一样,ZF中有一些类似的视图助手。您可以在视图脚本和布局模板中将它们用于此目的。
让我们使用您模块的module.config.php
启动。您可以在base_path
密钥下设置view_manager
密钥,如下所示
'view_manager' => [
'base_path' => 'http://www.yoursite.com/',
]
现在,如果您使用以下视图助手
echo $this->basePath();
// Outputs http://www.yoursite.com/
如果您使用以下
echo $this->basePath('css/style.css');
// Outputs http://www.yoursite.com/css/style.css
但是如果你不使用上面的配置
echo $this->basePath('css/style.css');
// Outputs css/style.css
正如@tasmaniski所说,关于$this->serverUrl();
你也可以在视图脚本中使用它。对此有利的是不需要$this->basePath()
如果需要ZF的控制器操作中的,该怎么办?在控制器操作中执行此操作的最简单方法是
public function indexAction()
{
$uri = $this->getRequest()->getUri();
$baseUrl = sprintf('%s://%s/', $uri->getScheme(), $uri->getHost());
// Use this $baseUrl for your needs
// Outputs http://www.yoursite.com/
}
否则,您可以通过以下方式获取,但这与$this->basePath()
public function indexAction()
{
// This is for zf2
$renderer = $this->getServiceLocator->get('Zend\View\Renderer\RendererInterface');
// This is for zf3
// Assuming $this->serviceManager is an instance of ServiceManager
$renderer = $this->serviceManager->get('Zend\View\Renderer\RendererInterface');
$baseUrl = $renderer->basePath('/uri');
// Use this $baseUrl for your needs
// Outputs http://www.yoursite.com/uri
}
此外,还有两个功能可以在控制器动作的不同条件下使用。如果使用重写规则,那些返回空字符串。那些是
$this->getRequest()->getBaseUrl();
$this->getRequest()->getBasePath();
这些并不像你期望的那样有效。必须参考issue才知道为什么会这样!