我如何在zend框架3中获取基本目录URL?

时间:2017-06-16 10:17:36

标签: php codeigniter zend-framework zend-framework3

我是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控制器?

2 个答案:

答案 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才知道为什么会这样!