我如何在 zend 框架 3 中获取基本目录 URL?
How does i Get Base Directory URL in zend framework 3?
我是 ZF3 的新手,我们已将基于 zend 的管理面板放置在基于 codeigniter 的主应用程序中。喜欢以下方式
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 控制器?
要获取基础 URL,您可以使用 serverUrl 查看助手(就像在 codeigniter base_url())
$this->serverUrl(); // return http://web.com OR
$this->serverUrl('/uri'); // return http://web.com/uri
我不确定您的设置,但请尝试...
您可以通过多种方式使用 ZF 微型工具完成这项工作。
ZF 中有一些类似于 CodeIgniter 的视图助手。您可以在视图脚本和布局模板中使用它们。
让我们开始使用您的模块的 module.config.php
。 view_manager
键下可以设置base_path
键如下
'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
}
此外,还有两个功能可以在控制器动作中的不同条件下使用。如果使用重写规则,那些 return 空字符串。那些是
$this->getRequest()->getBaseUrl();
$this->getRequest()->getBasePath();
这些并不像您期望的那样工作 我的意思是如您期望的那样。一定要参考issue才知道这是为什么!
我是 ZF3 的新手,我们已将基于 zend 的管理面板放置在基于 codeigniter 的主应用程序中。喜欢以下方式
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 控制器?
要获取基础 URL,您可以使用 serverUrl 查看助手(就像在 codeigniter base_url())
$this->serverUrl(); // return http://web.com OR
$this->serverUrl('/uri'); // return http://web.com/uri
我不确定您的设置,但请尝试...
您可以通过多种方式使用 ZF 微型工具完成这项工作。
ZF 中有一些类似于 CodeIgniter 的视图助手。您可以在视图脚本和布局模板中使用它们。
让我们开始使用您的模块的 module.config.php
。 view_manager
键下可以设置base_path
键如下
'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
}
此外,还有两个功能可以在控制器动作中的不同条件下使用。如果使用重写规则,那些 return 空字符串。那些是
$this->getRequest()->getBaseUrl();
$this->getRequest()->getBasePath();
这些并不像您期望的那样工作 我的意思是如您期望的那样。一定要参考issue才知道这是为什么!