38 layout zend-framework zend-view
在我的项目中,我有许多动态元素,每个页面都是一致的.我已将这些放在layout.phtml中
我的问题是:如何从控制器向我的布局发送变量?
如果我想从我的控制器发送东西,我可以使用:
$this->view->whatever = "foo";
并在视图中接收它
echo $this->whatever;
我无法弄清楚如何对我的布局做同样的事情.也许有更好的方法解决这个问题?
Tim*_*ain 46
布局是一个视图,因此分配变量的方法是相同的.在您的示例中,如果您要回显$ this->布局中的任何内容,您应该看到相同的输出.
一个常见问题是如何将在每个页面上使用的变量分配给布局,因为您不希望在每个控制器操作中复制代码.一个解决方案是创建一个插件,在渲染布局之前分配这些数据.例如:
<?php
class My_Layout_Plugin extends Zend_Controller_Plugin_Abstract
{
   public function preDispatch(Zend_Controller_Request_Abstract $request)
   {
      $layout = Zend_Layout::getMvcInstance();
      $view = $layout->getView();
      $view->whatever = 'foo';
   }
}
然后使用前端控制器注册此插件,例如
Zend_Controller_Front::getInstance()->registerPlugin(new My_Layout_Plugin());
10u*_*0us 43
不使用帮助器或插件做:
Zend_Layout::getMvcInstance()->assign('whatever', 'foo');
在此之后,您可以在布局中使用以下内容:
<?php echo $this->layout()->whatever; ?>
这将打印"foo".
小智 7
我有一个基本控制器,所有其他控制器都扩展.
所以我有一个控制器......
<?php
class BaseController extends Zend_Controller_Action
{
  public function init()
  {
    $this->view->foo = "bar";
  }
}
并在布局和/或视图中
<?= $this->foo ?>