Zend Framework - 在oop原则中,'$ this-> getRequest() - > getPost()'方法如何工作?

时间:2012-04-05 13:33:14

标签: php oop zend-framework

下面的方法如何运作?

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

班级getPost()中没有方法Zend_Controller_Request_Abstract,但它如何运作?在OOP原则中,方法getPost()应出现在Zend_Controller_Request_Abstract

如果没有直接实例,Zend如何在类getPost()中提取Zend_Controller_Request_Http

谢谢。

3 个答案:

答案 0 :(得分:2)

getPost()是扩展Zend_Controller_Request_Http的{​​{1}}类的一部分。

答案 1 :(得分: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 here

的更多信息

进一步回答您的问题

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

这就是Zend / Controller / Action.php中的内容 - 这里的评论说Zend_Controller_Request_Abstract'是-a '返回类型。我突出显示'is-a',因为它可以返回任何'是-a'Zend_Controller_Request_Abstract的类。要了解更多信息,请查看此wikipedia页面

  

“在知识表示,面向对象的编程和设计中,   is-a或is_a或是(包含)是一个类D的关系   是另一个B类的子类(因此B是D的超类)。“

答案 2 :(得分:1)

虽然我已经投票决定关闭这个问题(“这个问题可能会征求意见,辩论,争论,民意调查或扩展讨论”),但我认为你提出了一个有趣的观点。我认为ZF开发团队可以如下辩护:

就框架而言,Action只需要实现Zend_Controller_Action_Interface,这实际上只是dispatch()方法。该框架提供了一个抽象实现类Zend_Controller_Action,我们作为userland app开发人员通常会扩展以定义我们的操作方法等。但是该类中没有任何内容实际上需要Zend_Controller_Request_Http的实例。框架代码中没有$request->getPost()的内在依赖性。只有在用户空间,我们的应用程序开发人员才会使用创建Zend_Controller_Request_Http实例的默认调度流,这样我们就可以通过getPost()方法访问POST。

可以轻松地为CLI创建MVC应用程序 - 其中POST的概念确实不适用 - 使用Zend_Controller_Request_Abstract的不同子类作为其请求机制。