我写了一个助手来做我的主要导航。此帮助程序的一部分通过检查是否已将用户分配给视图来检查是否有用户登录

if($this->view->user)
{
//do stuff
}


但是,当我在布局脚本中调用此助手时,它无法访问$ this-> view-> user;。它具有NULL值(尽管var_dump($ this-> view返回视图对象,jsut并不具有我分配给它的所有属性)。仅当在视图脚本中将其分配给布局时,它才能访问用户数据。 ,即

$this->layout()->user = $this->user;


然后在帮手中做

if($this->view->layout()->user)
{
//do stuff
}


这很痛苦,因为这意味着在每个视图脚本中我都必须添加一行以将数据传递到布局。

有没有一种方法可以使在布局脚本中调用的助手访问视图的属性?

编辑*

来源:

    <?php

class Zend_View_Helper_MainNav extends Zend_View_Helper_Abstract {

        public function mainNav()
    {
        if ($this->view->layout()->navType == 'none'){
            $html = '<div id="nav"><a href="/" id="logo">Sum puzzles</a></div>';
        } else if($this->view->layout()->navType == 'small'){

                $html = '<div id="nav" class="small"><a href="/" id="logo">Sum puzzles</a><ul>' .
                                    '<li><a href="/puzzle/view" class="button">play a puzzle</a></li>' .
                                        '<li><a href="/sequence/play" class="button">puzzle sequences</a></li>' .
                                        '<li><a href="/puzzle/create" class="button">create a puzzle</a></li>';

                if(!$this->view->user)
                {
                    $html .=    '<li><a href="/teachers" class="button">teachers area</a></li>';
                }
                $html .='</ul></div>';

        } else if($this->view->layout()->navType == 'large'){
                $html = '<div id="nav" class="large"><a href="/" id="logo">Sum puzzles</a><ul>' .
                                        '<li><a href="/sequence/play" class="playSequence">Play a sequence of puzzles</a></li>' .
                                        '<li><a href="/puzzle/create" class="createPuzzle">Create your own puzzles</a></li>';
                if(!$this->view->user)
                {
                    $html .= '<li><a href="/teachers" class="teachersArea">teachers area</a></li>';
                }
                    $html .=    '</ul></div>';
        }
        return $html;
    }
}

最佳答案

我创建了一个基本示例,它可以为您提供帮助

////////////////////////////////////////////////
// application/controllers/IndexController.php
////////////////////////////////////////////////
<?php
class IndexController extends Zend_Controller_Action
{
    public function init() {
        Zend_Layout::startMvc() ;
        $this->view->test_h1 = "H1 test value" ;
    }
    public function indexAction()
    {
        $this->view->test_h2 = "H2 test value" ;
    }
}

////////////////////////////////////////////////
// application/views/helpers/Qwer.php
////////////////////////////////////////////////
<?php
class Zend_View_Helper_Qwer extends Zend_View_Helper_Abstract {
    public function qwer() {
        return "<h1>{$this->view->test_h1}</h1>"
            . "<h2>{$this->view->test_h2}</h2>" ;
    }
}

////////////////////////////////////////////////
// application/views/scripts/layout.phtml
////////////////////////////////////////////////
<?php echo $this->qwer() ?>

////////////////////////////////////////////////
// Output
////////////////////////////////////////////////
<h1>H1 test value</h1><h2>H2 test value</h2>

关于php - 使用布局脚本中调用的帮助程序获取zend View 的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1918024/

10-13 07:13