对于给定的请求,我想为我的Mvc的每个组件设置basePath
。我的意思是当我调用这些方法时,我想得到相同的结果,让我们说'/spam/ham/'
:
echo $this->headLink()->prependStylesheet($this->basePath() . '/styles.css') // $this->basePath() has to be '/spam/ham/'
$this->getServiceLocator()
->get('viewhelpermanager')
->get('headLink')
->rependStylesheet($this->getRequest()->getBasePath() . '/styles.css') // $this->setRequest()->getBasePath() has to be /spam/ham/
如何为我已找到的第一个案例here's my question设置basePath
。顺便说一下,原始手册中没有我从答案中收到的任何信息。
现在是第二个 - basePath
必须设置Request
:
$this->getRequest()->getBasePath()
在这里,我找到了一些实际上根本不起作用的答案http://zend-framework-community.634137.n4.nabble.com/Setting-the-base-url-in-ZF2-MVC-td3946284.html。如上所述here StaticEventManager
已弃用,因此我使用SharedEventManager
进行了更改:
// In my Application\Module.php
namespace Application;
use Zend\EventManager\SharedEventManager
class Module {
public function init() {
$events = new SharedEventManager();
$events->attach('bootstrap', 'bootstrap', array($this, 'registerBasePath'));
}
public function registerBasePath($e) {
$modules = $e->getParam('modules');
$config = $modules->getMergedConfig();
$app = $e->getParam('application');
$request = $app->getRequest();
$request->setBasePath($config->base_path);
}
}
}
在modules/Application/configs/module.config.php
我添加:
'base_path' => '/spam/ham/'
但它不起作用。问题是:
1)运行永远不会进入registerBasePath
功能。但它必须。我在init
函数中附加了一个监听器的事件。
2)当我为SharedEventManager
更改EventManager
时,碰巧会转到registerBasePath
函数,但会抛出一个异常:
Fatal error: Call to undefined method Zend\EventManager\EventManager::getParam()
我做错了什么?为什么程序的运行没有进入registerBasePath
函数?如果这是全局设置basePath
的唯一方法,那么该怎么做呢?
答案 0 :(得分:4)
我知道文档缺少这些东西。但你正确的方法是:
文档缺少此信息,您引用的帖子已经过时了。最快速,最简单的方法是使用onBootstrap()
方法:
namespace MyModule;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$app->getRequest()->setBasePath('/foo/bar');
}
}
如果您想从配置中获取基本路径,可以在那里加载服务管理器:
namespace MyModule;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager();
$config = $sm->get('config');
$path = $config->base_path;
$app->getRequest()->setBasePath($path);
}
}