Zend フレームワーク 2 内でレンダリングされている現在のビューを取得する方法はありますか?
これはイベントシステムで可能だと思いますが、うまくいかないようです。
この情報を取得する理由は、同じ名前の .js ファイルを自動的に含めることができるようにするためです。これにより、アクション内で毎回このルールを指定する時間を節約できます。
どうもありがとう、トム
Zend フレームワーク 2 内でレンダリングされている現在のビューを取得する方法はありますか?
これはイベントシステムで可能だと思いますが、うまくいかないようです。
この情報を取得する理由は、同じ名前の .js ファイルを自動的に含めることができるようにするためです。これにより、アクション内で毎回このルールを指定する時間を節約できます。
どうもありがとう、トム
ZF2 内で現在のビューをレンダリングするという意味がよくわかりませんが、アクションにちなんで名付けられた js ファイルを自動的に追加する方法を次に示します。これをコントローラーに入れるだけです:
public function onDispatch(MvcEvent $mvcEvent)
{
$renderer = $this->serviceLocator->get('Zend\View\Renderer\PhpRenderer');
$actionName = $mvcEvent->getRouteMatch()->getParam('action');
$jsFile = $actionName . '.js';
$baseUrl = $mvcEvent->getRouter()->getBaseUrl();
$renderer->headScript()->appendFile($baseUrl . '/js/' . $jsFile);
return parent::onDispatch($mvcEvent);
}
もちろん、js ファイルの場所と名前のコードを調整する必要がある場合があります。onDispatch メソッドは、アクションの前に自動的に呼び出されます。
ウニバルドさん、ありがとう
あなたの例は完全に機能しました。すべてのコントローラー/モジュールに適用されるように、イベントに添付するように以下に変更しました。これを行うために、アプリケーション モジュールの onBootstrap 関数に含めました。
$events = StaticEventManager::getInstance();
$events->attach('Zend\\Mvc\\Application', 'dispatch', function(\Zend\EventManager\Event $event)
{
$baseUrl = $event->getRouter()->getBaseUrl();
$renderer = $event->getApplication()->getServiceManager()->get('Zend\View\Renderer\PhpRenderer');
$action = $event->getRouteMatch()->getParam('action');
$controller = $event->getRouteMatch()->getParam('controller');
if (strlen($controller) > 0)
{
list($module, $_null, $controller) = explode('\\', $controller);
$renderer->headScript()->appendFile($baseUrl . '/module/' . $module . '/view/' . strtolower($module) . '/' . strtolower($controller) . '/' . strtolower($action) . '.js');
$renderer->headScript()->appendFile($baseUrl . '/module/' . $module . '/view/' . strtolower($module) . '/' . strtolower($module) . '.js');
}
});
もう一度、私を正しい方向に向けてくれてありがとう。