首页 文章

Zend框架:布局

提问于
浏览
0

我怎么能在layout.phtml中添加一些变量?我可以像这里一样在每个控制器中添加它:Sending variables to the layout in Zend Framework

但这并不是真正具有启发性,而且在Bootstrap中我也不想添加它 .

3 回答

  • 1

    创建将扩展 Zend_Controller_Action 的新抽象控制器 .

    IndexController extends My_Controller_Action - > My_Controller_Action extends Zend_Controller_Action

    你应该在任何地方放入 init() . :)

  • 0

    您可以创建一个名为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";
    
  • 1

    听起来你正试图将视图内容保留在控制器之外 . 我也相信尝试将视图内容保留在控制器之外,因此我尽可能在视图中放置视图内容 . 我是这样做的:

    例如,在layout.phtml中,我可能有两个占位符,一个用于 Headers ,另一个用于主要内容:

    <!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>
    

    您可以根据需要添加任意数量的占位符,而不会对控制器产生任何影响 . 使用此方法,大多数内容都不在控制器之外,除非它来自模型 .

相关问题