Могу ли я инициализировать Smarty в другом месте, а не в Bootstrap?

Я реализовал smarty в своем проекте Zend Framework. Я сделал это, следуя этому руководству Расширение Smarty 3 для Zend Framework < / em>. Моя проблема в том, что не нужно инициализировать smarty для каждого модуля, поэтому мне нужно знать имя модуля, прежде чем инициализировать Smarty в Bootstrap.

следующий вызов не будет работать, потому что getRequest() в данный момент не существует:

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

Я знаю, что могу получить имя модуля от $_SERVER['REQUEST_URI'], но мне это решение не нравится.

Есть ли другой способ получить имя модуля или я могу инициализировать Smarty в другом месте, а не в Bootstrap? Может в dispatchLoopStartup() методе?


person a_mark    schedule 13.09.2012    source источник


Ответы (1)


Вы можете создать плагин контроллера и инициализировать Smarty при запуске preDispatch:

class App_Controller_Plugin_Smarty extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if ('mymodule' === $request->getModuleName()) {
            // Initialize Smarty
            // ...
        }
    }
}
person Florent    schedule 13.09.2012