1

我一直在尝试在 Bootstrap.php 文件中设置一个对象,并希望能够在所有视图 phtml 文件中使用它。

例如,我在 _init 函数中设置 Zend_Translate,如下所示:

function _initTranslations() {
    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    $view = $layout->getView();

    $translate = new Zend_Translate('gettext', 
                                    APPLICATION_PATH.'/languages',
                                    null,
                                    array('scan' => Zend_Translate::LOCALE_FILENAME));
    $session = new Zend_Session_Namespace('translation'); // get session to check if user set lang
    $locale = new Zend_Locale();
    if (isset($session->language)) {
        // if user has previously set the lang we use this setting
        $requestedLanguage = $session->language;
        $locale->setLocale($requestedLanguage);
    } else {
        // otherwise we use the browser's setting
        $locale->setLocale(Zend_Locale::BROWSER);
        $requestedLanguage = key($locale->getBrowser());
    }
    if (in_array($requestedLanguage, $translate->getList())) {
        $language = $requestedLanguage;
    } else {
        $language = 'en';
    }
    Zend_Registry::set('locale', $locale);
    $translate->setLocale($language);
    $view->translate = $translate;
}

我会认为 $view->translate = $translate; 足以使 $translate 对象在我的视图中可用,但只能在我的 layout.phtml 中访问

我是 Zend 框架的相对新手,假设这个问题以前曾遇到过其他人,但我的互联网研究没有给我答案,所以我希望这里有人能指出我正确的方向?

4

2 回答 2

2

您只需要在 Bootstrap 中将 Zend_Translate 设置为 Zend_Registry,您就可以在任何 phml 中使用翻译视图助手。

将此行放在最后:

Zend_Registry::set('Zend_Translate', $translate);
于 2012-04-23T12:19:41.783 回答
0

尽管您已经找到了答案,但您可以通过以下方式访问引导程序中的视图资源:

$this->bootstrap('view');
$view = $this->getResource('view');
于 2012-04-23T20:57:39.910 回答