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のobjectmethodではありません。独自のスコープがあり、$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>";

$thisしたがって、関数定義で上記のコードを記述している場合、PHPパーサーはこの" "変数のオブジェクトコンテキストを見つけることができません。その「$this」変数を失っているわけではありませんが、アクセスできなくなりますが、ロジックが欠落しています。

それが役に立てば幸い。

于 2010-08-03T06:43:58.350 に答える