我可以初始化Smarty elsewere而不是Bootstrap吗?

时间:2012-09-13 15:14:54

标签: php zend-framework smarty

我在Zend Framework项目上实现了smarty。我是通过本教程Smarty 3 extension for Zend Framework完成的。我的问题是,不要为每个模块初始化smarty,所​​以我需要在Bootstrap中初始化Smarty之前知道模块的名称。

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

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

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

是否有其他方法可以获取模块名称,还是可以在其他地方而不是Bootstrap初始化Smarty?也许在dispatchLoopStartup()方法?

1 个答案:

答案 0 :(得分: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
            // ...
        }
    }
}