Php Zend视图变量在视图帮助程序中可用吗?

Php Zend视图变量在视图帮助程序中可用吗?,php,zend-framework,view,helper,Php,Zend Framework,View,Helper,我想知道Zend视图变量是否可以在我的视图助手类中使用,而不直接作为参数传入 谢谢 Luca由于所有视图帮助程序都在其$view属性中引用了视图,因此答案是肯定的 在助手端,您不知道哪些属性可用。最好在调用或构造时将任何必需的属性传递给帮助器。您可以访问视图帮助器中的$view表单,我将给出一个示例: 在下面的示例中,您可以设置和获取视图变量 <?php class App_View_Helper_Job extends Zend_View_Helper_Abstract {

我想知道Zend视图变量是否可以在我的视图助手类中使用,而不直接作为参数传入

谢谢


Luca

由于所有视图帮助程序都在其
$view
属性中引用了视图,因此答案是肯定的


在助手端,您不知道哪些属性可用。最好在调用或构造时将任何必需的属性传递给帮助器。

您可以访问视图帮助器中的
$view
表单,我将给出一个示例: 在下面的示例中,您可以设置和获取视图变量

<?php

class App_View_Helper_Job extends Zend_View_Helper_Abstract {

    public function setView(Zend_View_Interface $view) {
        $this->view = $view;
    }

    public function job() {
           $this->view->var1 = "testing var1 ";
           $this->view->var2 = $this->view->var1;
    }
}

你应该知道一件事:

视图帮助器的视图实例是在帮助器实例化时设置的,在视图克隆时不会更新。因此,如果从partial调用,您无法确定使用的是哪一个。

我发现,当我在注册表中设置视图实例并从helper获取它时,视图变量保持不变。下面是我在社交引擎项目中使用的代码片段

$view = Zend_Registry::get('Zend_View');
/*
 * Check data available and set it to local variable
 */
if(isset($view->localeTranslations[$key]))
{
   $translate = $view->localeTranslations[$key];
}

它们是存在的,但是如果你在助手中使用它们,它将是一个非常糟糕的助手,因为它违反了一个基本原则——解耦。当你调用视图助手时,如何将变量传递给它?
setView()
是在
Zend\u view\u helper\u Abstract
中实现的,所以你不需要自己去做。这不太正确。如果实现
setView()
,它将在执行帮助程序之前接收实际的视图对象。