CakePHP index() 与 view() 和 URL 组件

CakePHP index() vs view() and URL components

我对 CakePHP 2.4 中 index()view() 函数的区别和处理感到困惑。

具体来说,我正在尝试修改在 CakePHP 2.4

中编写的第 3 方 API

考虑这个控制器:

class EventsController extends AppController {
<snip>
  public function index() {
    if ($this->request->params['named']) {  
       $conditions = $this->request->params['named'];
    } else {
      $conditions = array();
   }
}

这让我可以构造一个 URL,比如 http://myserver/api/events/index/StartTime >=:12/EndTime <=15.json,当我进行查找时,StartTime 和 EndTime 会被传递到条件中。

太好了。

现在同一个控制器有这个附加功能:

public function view($id) {

}

当我调用 url 比如 http://myserver/api/events/1234.json

时似乎调用了这个函数

我正在尝试使用更多参数扩展 view,就像 index.js 一样。例如,我想调用:

http://myserver/api/events/1234/MonitorId =:3.jsonMonitorId =:3 作为参数传递以在视图中处理。我不想将这些添加到函数定义中——它可以是任何东西。

如果我尝试这样做,我会得到 "Controller" not found,但同样的方法在 index()

中有效

有人可以帮助我实现我的目标并帮助解释发生了什么吗?

(如果有帮助,控制器的完整代码是here

如我所见,您正在使用 CakePHP RESTful 路由 routes.php

在这里,

  • index 用于列出所有资源,例如所有博客 post。 URL /events/index 正在自动映射到控制器中的 index 方法。
  • view 用于显示特定资源,该资源可由某些唯一标识符(如 iduuid 标识,例如具体博客post。 URL /events/<some_identifier> 被映射到 view 方法

您需要做的是修改 view 定义以读取您在 URL 中传递的所有查询字符串参数并相应地调用 Model。默认。 routes 将 URL 中 events 之后的第一个字符串解析为资源 ID,并将其作为第一个参数传递给控制器​​中的 view 方法。这是脚手架代码。

您可以在 view 定义中使用命名参数 $this->request->params['named'] 并构造您的查询。没有硬编码。

事实证明,我需要显式调用 view 操作来向它传递更多参数。

所以 api/events/view/218245/AlarmFrames >=: 80.json 按预期工作,然后我可以使用 $conditions = $this->request->params['named'];

获取参数