我也有類似問題,這是我的解決方案。
默認模板注射器附連到優先-90電流控制器的事件管理器,它解決了僅當一個視圖模型不具有一個模板名稱。 知道了這一點,你可以用一個邏輯需要創建自己的模板注射器,它具有較高的優先級附加到事件管理器。
請參閱下面的代碼:
public function onBootstrap(EventInterface $event)
{
$eventManager = $event->getApplication()->getEventManager();
$eventManager->getSharedManager()
->attach(
'Zend\Stdlib\DispatchableInterface',
MvcEvent::EVENT_DISPATCH,
new TemplateInjector(),
-80 // you can put here any negative number higher -90
);
}
你的模板噴射器,它解決模板路徑而不是默認的。
class TemplateInjector
{
public function __invoke(MvcEvent $event)
{
$model = $event->getResult();
if (!$model instanceof ViewModel)
{
return;
}
$controller = $event->getTarget();
if ($model->getTemplate())
{
return ;
}
if (!is_object($controller))
{
return;
}
$namespace = explode('\\', ltrim(get_class($controller), '\\'));
$controllerClass = array_pop($namespace);
array_pop($namespace); //taking out the folder with controllers
array_shift($namespace); //taking out the company namespace
$moduleName = implode('/', $namespace);
$controller = substr($controllerClass, 0, strlen($controllerClass) - strlen('Controller'));
$action = $event->getRouteMatch()->getParam('action');
$model->setTemplate(strtolower($moduleName.'/'.$controller.'/'.$action));
}
}
下面是從我的博客,我更詳細地寫了一篇關於它的鏈接:http://blog.igorvorobiov.com/2014/10/18/creating-a-custom-template-injector-to-deal-with-sub-namespaces-in-zend-framework-2/
不知道我得到你,但我這是怎麼設置我的模板$視圖 - > setTemplate(「路徑」); – dixromos98 2014-10-17 14:28:43
嘿@ dixromos98,你的建議的答覆是確實是正確的,如果你想手動告訴ZF2,它需要使用特定的視圖。我只是好奇,如果有什麼方法可以在不設置模板時改變ZF2的行爲。 – nstapelbroek 2014-10-17 14:53:39
謝謝大家回答我的問題!我在辦公室留下了關於此問題的代碼,因此我會盡快在星期一回復您,以標記正確的答案。 – nstapelbroek 2014-10-18 13:25:10