Zend 框架将变量传递给所有视图,从控制器到$this->layout->content()之外的任何内容


Zend Framework passing a variable to all views from a controller to anything outside of $this->layout->content()

好吧,这个主题没有意义,所以我试图在这里更好地描述它。

Zend Frame在这里使用。而且我在将变量传递给我的视图时遇到了问题,即构成模板的"top.phtml"中包含的视图。我正在尝试做的是实现面包屑概念。面包屑文件包含在内容视图文件之前的 top.phtml 中。因此,就痕迹导航文件而言,没有定义痕迹导航变量。

我可以在控制器视图中print_r面包屑的设置数组,没问题,所以我知道它正在工作,只是该视图上方的任何内容,特别是按事物顺序无法获取变量。所以我想我想回答的是,是否有一种方法可以将变量传递给概念上类似于的整体方案

$this->view->variable_name = blah;

像top.phtml这样高的东西在哪里可以拿起它使用?

您可能正在寻找占位符。

例:

从控制器设置占位符值:

$this->view->placeholder('some_placeholder_name')->set('blah');

从视图中设置占位符值

$this->placeholder('some_placeholder_name')->set('blah');

检索视图脚本布局中的占位符值:

$value = $this->placeholder('some_placeholder_name');

占位符内容在应用程序执行结束时呈现,因此控制器中设置的值应在顶级视图脚本中可用top.phtml

我认为这将起作用:

$this->layout()->breadcrumbs = ...

然后在top.phtml中打印$this->layout()->breadcrumbs

  • Zend布局

在花费了几个小时试图让placeholder()partialLoop()一起工作之后,我终于放弃并破解了一个修复程序,将 vars 传递给部分:

$vars = (array) $this->getVars();
foreach ($this->rows as $row) {
    $partialVars = array(
        'row' => $row,
        'vars' => $vars,
    );
    echo $this->partial('row.phtml', $partialVars);
}

丑陋,但它奏效了。

+1 为每个人提供了线索,但是以上这些都对我有利。然而,在它们之间,它们引导我找到我的答案,即

Zend_Registry

在我的控制器中,我构建了我的数组并将其传递给Zend_Registry

    $breadArray = array(
        array("icon"=>"i_robot", "href"=>"systems/"),
        array("href"=>"metrics","text"=>"Metrics")
    );
    Zend_Registry::set('breaded_crumbs', $breadArray);

然后在我使用的内容和视图之前加载的 breadcrumb.phtml 中

print_r(Zend_Registry::get('breaded_crumbs'));

看看它是否有效,它给了我数组,所以我对于将来希望在视图本身之外扩展变量的任何人,注册表似乎是要走的路。我尝试了占位符和布局,两者都给了我关于不是某物或其他东西的错误,当我让它们部分工作时,我没有得到我所期望的。