[Zend Framework][php] 独自のZend_Viewのビューヘルパーの作り方①
独自の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); ?>
これで独自のビューヘルパーが作れます。
次回は実際に例としてヘルパークラスを作成してみることにします。