【问题标题】:Reaching CakeRequest object from CakePHP component从 CakePHP 组件获取 CakeRequest 对象
【发布时间】:2012-12-21 20:06:16
【问题描述】:

我正在尝试从我的自定义组件中访问 CakeRequest 对象。但我不能。在cookbook 里面我发现了这个:

CakeRequest 是 CakePHP 中使用的默认请求对象。它 集中了许多用于询问和交互的功能 带有请求数据。在每个请求上,都会创建一个 CakeRequest,然后 通过引用传递给使用的应用程序的各个层 请求数据。默认情况下,CakeRequest 被分配给 $this->request, 并且在 Controller、Views 和 Helpers 中可用。 您还可以访问 使用控制器引用在组件中。

控制器引用意味着什么?我尝试了以下。它有效。
但是如何在不将参数 this 传递给组件的情况下到达 CakeRequest 呢?

// MyController.php
    public function foo(){
        $this->MyUtil->bar($this);
    }

// MyUtilComponent.php
    function bar(&$controller) {
        $a=$controller->request;
        print_r($a);
    }

【问题讨论】:

  • 我认为“控制器引用”只是指从控制器访问它:$this->params->someVar。至于如何不通过$this 或许你需要和var $uses 搞混?不知道 - 我发现 Cake 是一个很棒的框架,可以用来编写无法轻易重用的一次性代码。
  • 这看起来对你来说可能是一本很好的读物:mark-story.com/posts/view/the-cakerequest-object-in-cakephp-2-0
  • 您使用的是 PHP5。为什么要尝试通过引用传递对象?

标签: php cakephp cakephp-2.0


【解决方案1】:

CakePHP 组件有一个initialize 回调,您可以使用它来存储对控制器的引用。将此添加到您的 Component 类:

public function initialize(Controller $controller) {
    $this->controller = $controller;
}

那么bar 可以是:

function bar() {
    $a = $this->controller->request;
    print_r($a);
}

【讨论】:

  • 几乎 - public function initialize(Controller $controller) 在这里避免 E_STRICT 警告。
  • 感谢@trante 的链接,我已将其添加到答案正文中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 2013-01-25
  • 2022-01-01
  • 1970-01-01
  • 2021-10-13
  • 2019-06-05
相关资源
最近更新 更多