4

Zend Framework で HMVC パターンを使用することは可能ですか? デフォルトで Kohana 3 に実装されており、とても気に入っているので、Zend Framework で使用したいと考えています。

編集

私はそれを可能にしたい:1)完全なリクエスト(コントローラー/アクションなど)を他のリクエスト内に含める 2)上記のようにコントローラー/アクションを直接呼び出す

ウィジェットに使うだけでなく、他のページのコンテンツを含むページを作りたい...

編集 2

もう少し明確に言うと、いくつかの要素を含むページ オブジェクトがあります。これらの要素には、単純な要素 (テキスト、画像など) と、controller:action 呼び出しである特別な要素があります。各ページには、「無制限」の (特別な) 要素を含めることができます。これらの要素をループして、処理している要素の種類を定義し、その要素の結果をビューのコンテンツに追加したいだけです。

お気に入り:

foreach($Page->Elements AS $Element) {
    switch(get_class($Element)) {
        case "Base\TextElement":
            // Add text element to content
            ...
            break;
    case "Base\SpecialElement":
            // Get result of the controller:action call
            break;
        case "Base\ImageElement":
            // Add image element to content
            ...
            break;
        default:
            echo "No case defined for ".get_class($Element);
            die;
    }
}
4

2 に答える 2

3

それはすべて、あなたが何をしようとしているのかによって異なります。

おそらく、アクション スタックまたはアクション ビュー ヘルパーが作業を行いますが、ディスパッチ オーバーヘッドが発生するため (おそらく ZF2 で削除される予定です)、これは最適なソリューションではない可能性があります。

2 番目のアプローチは、コントローラー内のモデルとアクションを直接呼び出すビュー ヘルパーです。アクション ヘルパー (およびそれらへの静的呼び出し) を使用して、コントローラー ロジックにアクセスできます。

また、次のブログ投稿も参照してください。

アクション ヘルパーを使用して再利用可能なウィジェットを実装する - Phly、boy、phly

于 2010-10-14T17:34:55.973 に答える
0

Kohana の HMVC パターンが最終的に行うことは、内部で HTTP 要求を処理する方法を提供することなのでZend_Http_Client、同じことを行うアダプターを作成できます。これを一度行うための概念実証コードをいくつか書きました。zend-http-client-adapter-internalを参照してください。

HelloControllerからの呼び出しの例IndexController:

class IndexController extends Zend_Controller_Action
{

    public function indexAction()
    {
        $client = new Zend_Http_Client("http://api.local/hello/?name=Clem");

        $client->setAdapter(new Http_Client_Adapter_Internal(
            $this->getFrontController()
        ));

        $response = $client->request();
        echo $response->getBody();
    }

}

ご覧のとおり、Kohana の の代わりにRequest::factory($url)、クライアントを構築し (api.localホスト名は使用されていないと思いますが、いくつかのアサーションを満たすために必要です)、そのアダプターを設定する必要があります。これらの 2 つの手順は、明らかにラッパー関数によって実行できます。

于 2011-04-24T17:55:19.677 に答える