Я хочу, чтобы basePath
было одинаковым для каждого компонента моего Mvc для данного запроса. Я имею в виду, что когда я вызываю эти методы, я хочу получить тот же результат, скажем, '/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/
Как установить basePath
для первого случая, который я уже нашел, вот мой вопрос. Кстати, в оригинальном руководстве нет никакой информации, которую я получил из ответа.
И теперь второе - basePath
нужно установить в Request
:
$this->getRequest()->getBasePath()
Здесь я нашел ответ, который на самом деле вообще не работает http://zend-framework-community.634137.n4.nabble.com/Setting-the-base-url-in-ZF2-MVC-td3946284.html. Как сказано здесь 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
глобально, то как это сделать правильно?