basePath
特定のリクエストに対して、Mvc のすべてのコンポーネントでa を同じに設定したいと考えています。つまり、これらのメソッドを呼び出すときに同じ結果を得たいということです'/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
私がすでに見つけた最初のケースの設定方法、これが私の質問です。ちなみに、元のマニュアルには、回答から得た情報はありません。
そして今、2番目のもの -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
グローバルに設定する唯一の方法である場合、それを正しく行う方法は?