独自のZend_Viewのビューヘルパーはいくつかのルールをみたせば簡単に作ることができます。
- ヘルパー名とビューヘルパーのクラス名の最後の部分は同じにする(ただしMixedCaps方式)
- ビューヘルパーのクラスにはヘルパー名と同じ名前のpublicメソッドが定義されている
- メソッド内ではechoとかprintを行ってはいけない。printやechoされる内容をエスケープして返す
- クラスはヘルパーと同じ名前のファイルに作成する
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); ?>
```これで独自のビューヘルパーが作れます。 次回は実際に例としてヘルパークラスを作成してみることにします。