我有一个项目,它有这样的结构:
http://img526.imageshack.us/img526/2333/92348689.png
我想制作一个类似下面的变量
$templatePath = $this->baseUrl('/application/templates/')`
它可以在许多模块中的许多视图中使用。我想我可以通过在Bootstrap.php
(应用程序)中声明变量来实现,但我不知道该怎么做。
答案 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;
}