1

我对 ZendFramework 比较陌生,正在尝试解决这个问题。在我的视图脚本(index.phtml)中,我有一段代码说:

<?php

function getErrorString($element)
{
echo "<pre>";
print_r($this);
echo "</pre>";

 $string = '';
 if(!empty($this->error[$element]))
 {
  $string = $string.'<label class="error" for="'.$element.'" generated="true">';
  foreach($this->error[$element] as $error)
  {
   $string = $string.$error; 
  }
  $string = $string.'</label>';
 }
 return $string;
}

echo "<pre>";
print_r($this);
echo "</pre>";
getErrorString("blah");
die();

这给了我:

 Fatal error: Using $this when not in object context in index.phtml on line XX

在我看来,当您在视图中创建函数时,您会丢失 $this 变量。我确实在网上搜索过,我看不到其他人试图实现我正在做的事情(极不可能,也许我搜索错了)。

凭借过去开发其他应用程序的经验,我看不出为什么应该将此函数放在单独的助手中 -> 特别是因为这是唯一会调用该函数的地方。

任何想法将不胜感激。

4

2 回答 2

2

您的函数 getErrorString() 不是 Zend_View-Object 的对象方法。它有自己的范围,无法达到 $this。

以下代码应该适用于 index.phtml

function getErrorString($viewObject, $element)
{
echo "<pre>";
print_r($viewObject);
echo "</pre>";

 $string = '';
 if(!empty($viewObject->error[$element]))
 {
  $string = $string.'<label class="error" for="'.$element.'" generated="true">';
  foreach($viewObject->error[$element] as $error)
  {
   $string = $string.$error; 
  }
  $string = $string.'</label>';
 }
 return $string;
}

echo "<pre>";
print_r($this);
echo "</pre>";
getErrorString($this,"blah");
die();
于 2010-08-03T06:52:11.157 回答
0

最后一次使用“ $this”变量可能是显示致命错误的主要原因。这是非常合理的,因为除了定义与该类有关的方法和属性之外,您不能在类定义中编写任何其他内容。

此外,如果您在视图页面中创建任何函数,则在该函数中$this,默认情况下无法访问“”变量。因此,您必须使该“ $this”变量成为全局变量,或者您需要在函数定义之外打印与“$this”变量相关的所需部分。

echo "<pre>";
print_r($this);
echo "</pre>";

因此,当您在函数定义中编写上述代码时,PHP Parser 无法找到此“ $this”变量的任何对象上下文。并不是您丢失了那个“$this”变量,而是它无法访问,而是丢失的逻辑。

希望能帮助到你。

于 2010-08-03T06:43:58.350 回答