如何制作可在许多视图中使用的变量?

时间:2013-06-07 15:53:46

标签: php zend-framework bootstrapping zend-view

我有一个项目,它有这样的结构:

http://img526.imageshack.us/img526/2333/92348689.png

我想制作一个类似下面的变量

$templatePath = $this->baseUrl('/application/templates/')` 

它可以在许多模块中的许多视图中使用。我想我可以通过在Bootstrap.php(应用程序)中声明变量来实现,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

通常,我只是将这些变量放入应用程序引导程序文件中。这是一个例子:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    protected function _initViewVariables() {
        $this->bootstrap('View');

        $this->view->fooValue = 'foo';
        $this->view->barValue = 'bar';

        $config = Zend_Registry::get('config');

        if( $config->recaptcha->enabled ) {
            $this->view->captcha = true;
            $this->view->recaptchaPublicKey = $config->recaptcha->publicKey;
        }
        else {
            $this->view->captcha = false;
        }

    }

}

我希望它有所帮助!

答案 1 :(得分:1)

路由完成后,

Base Url可用(routeShutdown挂钩),因此在Bootstrap中访问它将无效。

所以在preDispatch()中创建一个控制器插件

public function preDispatch($req) {

$view = new Zend_View();
$view->placeholder('burl')->set(Zend_Controller_Front::getInstance()->getBaseUrl());

}

要在视图中访问它,请执行index.phtml

 echo $this->placeholder('burl'); 

答案 2 :(得分:0)

您可以使用Zend_Registry。

在您的引导程序中或您网站中的任何位置

 Zend_Registry::set("TagLine", "Have a Nice Day");

仅在视图中使用

 <?= Zend_Registry::get("TagLine"); ?>

要获得额外的功劳,您还可以为此制作一个视图助手(ZF2有一个)

class My_View_Helper_Registry extends Zend_View_Helper_Abstract
{
    public function registry($key)
    {
        return Zend_Registry::get($key);
    }
}

在你的引导程序中,你将添加一个方法,如:

protected function _initSiteRegistry(){
    Zend_Registry::set("Site_Name", "My Cool Site";
    Zend_Registry::set("Site_TagLine", "Have a nice day";
}

此外,如果您正在使用视图帮助程序方法,您还需要注册帮助程序路径..您可以在引导程序中的_initView中执行此操作。

    protected function _initView(){
            $view = new Zend_View();
            $view->doctype("HTML5");
            $view->setEncoding("UTF-8");
            $view->addScriptPath(APPLICATION_PATH."/local/views");
            // set this as the viewRenderer's view. 
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        $viewRenderer->setView($view);
            $view->addHelperPath("My/View/Helper/", "My_View_Helper_");
            return $view;
    }