0

Zendがpartial()メソッドを実装した場所を見つけて、パーミッション制御のためにACLコードを追加できるようにしようとしています。メソッドの呼び出し元オブジェクトは常にZend_Viewオブジェクトであることを知っており、調べましたが、部分的なメソッド(およびそれが継承/実装するすべてのクラス/インターフェイス)が欠落しているようです。

Zend_Viewがそのメソッドを取得する方法を知っている人はいますか?

最適化に関心があり、代わりにrender()を使用する必要があると私に言いたがっている人のために、問題のパーシャルは、テーブル行パーシャルと同じ種類の役割を果たすため、変数入力が必要です。render()メソッドでそれを行う方法を教えてくれない限り、トピックにとどまってください。

また、Zend Frameworkコードを直接変更するつもりはなく、実装をオーバーライドしたいだけですが、オーバーライドしているメソッドを確認して、作業内容を確認したいと思います。

4

1 に答える 1

1

独自のヘルパーを作成し、デフォルトのヘルパーをオーバーライドする方法

ビューヘルパーについて話しているので、そのコードはにありますlibrary\Zend\View\Helper\Partial.php。パーシャルビューヘルパーの機能を変更する場合は、独自のヘルパーを作成してください。

class MyProject_View_Helper_MyHelper extends Zend_View_Helper_Abstract {}

また

class MyProject_View_Helper_MyHelper implements Zend_View_Helper_Interface {}

次に、このヘルパーへのパスを構成に追加して、このヘルパーをヘルパースタックに追加します。

resources.view.helperPath.MyProject_View_Helper_ = "MyProject/View/Helper/"

ヘルパーを呼び出すとPartial、デフォルトの部分ヘルパーを完全にオーバーライドできます。

Akrabatによるビューヘルパーについては、このブログも参照してください。

そして、あなたの言葉でそれを置くために...

...Zend_Viewが部分的なメソッドを取得する方法

ヘルパーが登録されている場合、次のコードにより、ビューから呼び出すことができます。Zend_View_Abstract

/**
 * Accesses a helper object from within a script.
 *
 * If the helper class has a 'view' property, sets it with the current view
 * object.
 *
 * @param string $name The helper name.
 * @param array $args The parameters for the helper.
 * @return string The result of the helper output.
 */
public function __call($name, $args)
{
    // is the helper already loaded?
    $helper = $this->getHelper($name);

    // call the helper method
    return call_user_func_array(
        array($helper, $name),
        $args
    );
}
于 2013-01-08T21:07:34.043 に答える