いろいろ準備中

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

7月 10th, 2008 Posted in Zend Framework

独自の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); ?>

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

コメントを投稿する