0

私のアプリケーションでは、1 つの Viewクラスがあります。インスタンス化され、次のようなことを行うコントローラーに注入されます

$this->view->load('sometemplate')

そして、後の段階でコントローラーの外に出ます

$view->render();

それは私が必要とすることを行いますが、最近私は遭遇ViewHelpersし、プレゼンテーションロジックをカプセル化するというアイデアが好きです.

問題は、私は複数持っていて、私のシングルがそれらすべてを個別に保持しViewHelpersたくないということですView

private $orderHelper;
private $feedbackHelper;
....

また

private $helpers = array();

View次のようにページごとに異なるものにするのは理にかなっていますか

class Feedback extends View {
    private $feedbackHelper;
}

またはこれを達成するためのより良い方法はありますか?

私が考えていた別の方法は、任意のページから必要なものを作成するために使用できる をView持っているということでした。HelperFactoryHelper

これらのヘルパーを実装する最良の方法は何でしょうか?

ありがとう。

4

1 に答える 1

0

私が素人として:

複数のヘルパーを処理するためだけに異なる View クラスを作成することは意味がありません (不必要に繰り返さないでください)。

HelperFactory をメソッドとして作成しても意味がありません。なぜなら、ヘルパー オブジェクトを動的に作成したい場合でも、このメソッドに「新しいヘルパー」ステートメントを渡すか実行する必要があるからです。それでは、依存性注入と呼んで、コントローラーに 1 つ以上のヘルパーをビューに注入させてみませんか...

class Controller {
    this->view->inject(new ViewHelper($args));
}

...そして、あなたの View が helper[] に入れられるようにします (なぜですか?)...

class View {
    private $helper;

    public function inject($dependency) {
        $key = lcfirst(get_class($dependency));
        $this->helper[$key] = $dependency;
    }

    public function getHelper($key) {
        return $this->helper[$key];
    }
}

ビューを介してヘルパーにアクセスできます。

それにもかかわらず、他の人がそれについてどう思うか、私も興味があります。

この解決策をさらに一歩進めると、依存性注入コンテナーが使用される可能性があります。

これらは興味深く、かなり理解しやすいリンクです:

于 2013-05-24T12:10:29.777 に答える