3

我在 Zend Framework 项目中实现了 smarty。我按照本教程Smarty 3 extension for Zend Framework做到了这一点。我的问题是不会为每个模块初始化 smarty,所​​以我需要在 Bootstrap 中初始化 Smarty 之前知道模块的名称。

以下调用不起作用,因为getRequest()当时不存在:

Zend_Controller_Front::getInstance()->getRequest()->getModuleName() 

我知道我可以从中获取模块名称$_SERVER['REQUEST_URI'],但我不喜欢这个解决方案。

是否有另一种获取模块名称的方法,或者我可以在其他地方而不是在其他地方初始化 Smarty Bootstrap?也许在dispatchLoopStartup()方法上?

4

1 回答 1

0

您可以创建一个控制器插件并在preDispatch触发时初始化 Smarty:

class App_Controller_Plugin_Smarty extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if ('mymodule' === $request->getModuleName()) {
            // Initialize Smarty
            // ...
        }
    }
}
于 2012-09-13T16:01:52.060 回答