Wadslog

[Zend Framework][php] 独自のZend_Viewのビューヘルパーの作り方①

Jul 10, 2008

独自のZend_Viewのビューヘルパーはいくつかのルールをみたせば簡単に作ることができます。

  1. ヘルパー名とビューヘルパーのクラス名の最後の部分は同じにする(ただしMixedCaps方式)
  2. ビューヘルパーのクラスにはヘルパー名と同じ名前のpublicメソッドが定義されている
  3. メソッド内ではechoとかprintを行ってはいけない。printやechoされる内容をエスケープして返す
  4. クラスはヘルパーと同じ名前のファイルに作成する

fooというヘルパーを作ると仮定して、上記についてひとつずつ説明します。 1. ヘルパー名とビューヘルパーのクラス名の最後の部分は同じにする fooというヘルパーを作る場合、クラス名の最後にはFooという名前がないといけません。また、クラス名には「_(アンダースコア)」区切りでプレフィックスをつけることができます。というわけで、クラス名の最後にという表現になっています。``` class Foo class My_Foo class My_View_Helper_Foo

はどれもクラス名としてOKです。2番目の例だとMyが、3番目の例だとMy\_View\_Helperがプレフィックスになります。 ただし、プレフィックスにはView\_Helperを含めることが推奨されているので、2番目よりも3番目の名前のほうがいいです。 **2\. ビューヘルパーのクラスにはヘルパー名と同じ名前のpublicメソッドが定義されている** つまりこういうことです class My_View_Helper_Foo { … public function foo($input) { … } … }

**3\. メソッド内ではechoとかprintを行ってはいけない。printやechoされる内容をエスケープして返す** ビューヘルパー内で出力するのではなく、ビュースクリプトにて < ?php echo $this->foo($this->name); ?>

のように出力するようにします。クラスのメソッド内では、エスケープ済みの結果を返すようにするだけです。 class My_View_Helper_Foo { … public function foo($input) { … return htmlspacealchars($output) } … }

**4\. クラスはヘルパーと同じ名前のファイルに作成する** 今回の場合は、Foo.phpというファイルにクラスを定義します。 以上の条件をみたしていれば、ビューヘルパーのパスのどこかにファイルを置いておくだけで自動的に読み込み、インスタンス化してくれます。ビューヘルパーのパスを追加するには、Zend\_ViewクラスのsetHelperPath()を使います。 $view = new Zend_View();

$view->setHelperPath('/path/to/helpers', ‘My_View_Helper’); ?>

パスは既存のパスにスタックのように積み重ねられていきます。つまり後から追加されたパスが先に検索されることになります。

setHelperPath()の第2引数ではビューヘルパーのプレフィックスを指定できます(最後の_は省略可です)。もし指定しない場合はデフォルトで’Zend_View_Helper_‘がプレフィックスとなります。

実際にスクリプトでこのように使います

< ?php $this->foo($this->value); ?>

```これで独自のビューヘルパーが作れます。 次回は実際に例としてヘルパークラスを作成してみることにします。
comments powered by Disqus