【发布时间】:2009-12-05 11:19:50
【问题描述】:
如何在 layout.phtml 中添加一些变量? 我可以将它添加到每个控制器中,如下所示:Sending variables to the layout in Zend Framework
但这并不是真正的暗示,我也不想在 Bootstrap 中添加它。
【问题讨论】:
标签: php zend-framework layout
如何在 layout.phtml 中添加一些变量? 我可以将它添加到每个控制器中,如下所示:Sending variables to the layout in Zend Framework
但这并不是真正的暗示,我也不想在 Bootstrap 中添加它。
【问题讨论】:
标签: php zend-framework layout
您可以创建一个名为 LayoutDefaults 的前端控制器插件:
class MyLib_Controller_Plugin_LayoutDefaults extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$mvc = Zend_Layout::getMvcInstance();
if ( !$mvc ) return;
$view = $mvc->getView();
if ( !$view ) return;
/**
* Set the defaults.
*/
$view->value1 = "default value1";
}
}
在您的前端控制器中:
Zend_Controller_Front::getInstance()
->registerPlugin( new MyLib_Controller_Plugin_LayoutDefaults() );
在你的 layout.phtml 中:
<?= $this->escape($this->value1) ?>
最后,在您的控制器中,根据需要覆盖默认值:
$this->view->value1 = "new value 1";
【讨论】:
创建将扩展 Zend_Controller_Action 的新抽象控制器。
IndexController extends My_Controller_Action -> My_Controller_Action extends Zend_Controller_Action
你应该在那里输入init() 任何你想要的东西。 :)
【讨论】:
听起来您正试图将视图内容排除在控制器之外。我也相信尝试将视图内容排除在控制器之外,因此我会尽可能将视图内容放置在我的视图中。我是这样做的:
例如,在 layout.phtml 中我可能有两个占位符,一个用于标题,另一个用于主要内容:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><?php echo $this->escape($this->placeholder('titleContent')) ?></title>
</head>
<body>
<div id="maincontent">
<?php echo $this->layout()->content ?>
</div>
</body>
然后在 index.phtml 视图本身中,我将两个内容都放在这样的位置:
<?php $this->placeholder('titleContent')->Set('My Index Page Title') ?>
<p>Index page content here</p>
您可以根据需要添加任意数量的占位符,而不会影响您的控制器。使用这种方法,大多数内容都不会出现在控制器之外,除非它来自模型。
【讨论】: