【问题标题】:Zend Framework: View variable in layout script is always nullZend Framework:布局脚本中的视图变量始终为空
【发布时间】:2010-04-22 05:58:33
【问题描述】:

我在 someAction 函数中设置了一个视图变量,如下所示:

$this->view->type = "some type";  

当我像这样在布局脚本中访问这个变量时:

<?php echo $this->type ?>

它什么也不打印。怎么了?

我的 application.ini 与布局相关的设置

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.layout.layout = "layout" ; changed 'default' to 'layout'

编辑

这个thread 建议替代解决方案,但正在寻找上述问题的解决方案。这在 Zend 1.6.2 中有效。我刚刚升级到 1.10,它停止工作了。

编辑

如果我在任何 _init Bootstrap 函数中设置此视图变量,它就会起作用。

【问题讨论】:

    标签: model-view-controller zend-framework layout


    【解决方案1】:

    如果你想为你的布局分配一些东西,你必须走另一种方式:

    // get the layout instance
    $layout = Zend_Layout::getMvcInstance();
    
    // assign fooBar as Name to the layout
    $layout->name = 'fooBar';
    

    【讨论】:

    • @ArneRie:这与我在编辑中提到的备用链接中发布的解决方案相同。
    • 刚刚用 ZF 1.10.1 测试过它可以工作,请记住。你必须使用 layout()->name; ?>
    • 是的,您的解决方案有效,但我的问题是为什么不能直接访问视图变量?而且它以前工作得更早。另请参阅我的第二次编辑。
    【解决方案2】:

    我相信布局视图对象和动作视图对象是 Zend_View 类的独立实例。

    我认为这是将变量从控制器传递到布局的正确方法:

    /**
     * Controller action
     */    
    public function indexAction()
    {
        $this->_helper->layout()->assign('myName', 'John Doe');
    }
    

    然后在您的布局脚本中,您可以通过引用布局对象来访问变量,如下所示:

    <html>
    <body>
    <?php echo $this->layout()->myName; ?>
    </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      您的 application.ini 文件中有以下条目吗?

      resources.view[] =
      

      因此,您可以不使用任何选项初始化视图并通过以下方式使用它:

      <?php echo $this->type ?>
      

      【讨论】:

      • 你是否通过:$this->bootstrap('view');放在bootstrap.php文件的一个资源方法里?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多