4

以下の方法はどのように機能しますか?

$this->getRequest()->getPost();

getPost()classにはメソッドがありませんZend_Controller_Request_Abstractが、どのように機能しますか? OOP の原則では、メソッドgetPost()は に表示されZend_Controller_Request_Abstractます。

直接のインスタンスがない場合、Zend はどのようgetPost()にしてクラスを取り込むことができますか?Zend_Controller_Request_Http

ありがとうございました。

4

3 に答える 3

2

Zendは最初に、Zend / Controller/Front.phpで利用可能なFrontControllerにすべてのリクエストを送信します。FrontControllerはHttpリクエストをコントローラーに挿入しますここにそれが起こっているコードがあります

    /**
     * Instantiate default request object (HTTP version) if none provided
     */
    if (null !== $request) {
        $this->setRequest($request);
    } elseif ((null === $request) && (null === ($request = $this->getRequest()))) {
        require_once 'Zend/Controller/Request/Http.php';
        $request = new Zend_Controller_Request_Http();
        $this->setRequest($request);
    }

フロントコントローラーの目的は、要求環境を初期化し、着信要求をルーティングしてから、検出されたアクションをディスパッチすることです。応答を集約し、プロセスが完了するとそれらを返します。

FrontControllerの詳細はこちら

さらに質問に答えるには

/**
 * Return the Request object
 *
 * @return Zend_Controller_Request_Abstract
 */
public function getRequest()
{
    return $this->_request;
}

これは、Zend / Controller/Action.phpで行うことです。ここでコメントはZend_Controller_Request_Abstract'is -a 'リターンタイプを示しています。'is-a'を強調表示したのは、'is-a'Zend_Controller_Request_Abstractである任意のクラスを返すことができるためです。詳細については、このウィキペディアのページを確認してください

「知識表現、オブジェクト指向プログラミングおよび設計では、is-aまたはis_aまたはis(包含)は、あるクラスDが別のクラスBのサブクラスである(したがって、BはDのスーパークラスである)関係です。」

于 2012-04-05T13:44:30.387 に答える
2

getPost()Zend_Controller_Request_Httpを拡張するクラスの一部ですZend_Controller_Request_Abstract

于 2012-04-05T13:35:16.207 に答える
1

私は質問を締めくくることに投票しましたが (「この質問は、意見、討論、議論、世論調査、または広範な議論を求める可能性が高い」)、興味深い点を提起したと思います。ZF 開発チームは次のように弁護できると思います。

フレームワークに関する限り、 Action は implement のみを必要としZend_Controller_Action_Interface、これは本質的に単なるdispatch()メソッドです。このフレームワークは、ユーザーランド アプリの開発者として通常、アクション メソッドなどを定義するために拡張する抽象実装クラスZend_Controller_Actionを提供します。しかし、そのクラスには、実際にZend_Controller_Request_Http. $request->getPost()フレームワーク コードには固有の依存関係はありません。アプリ開発者が通常、インスタンスを作成するデフォルトのディスパッチ フローを使用するのはユーザーランドだけです。これにより、メソッドZend_Controller_Request_Httpを介して POST にアクセスできるようになります。getPost()

POST の概念が実際には適用されない CLI 用の MVC アプリをZend_Controller_Request_Abstract、要求メカニズムとして別のサブクラスを使用して簡単に作成できます。

于 2012-04-05T14:14:28.937 に答える