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

时间:2018-05-05 00:11:37

标签: cakephp cakephp-2.0

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

具体来说,我正在尝试修改CakePHP 2.4中创建的第三方API

考虑这个控制器:

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

这允许我构建一个类似http://myserver/api/events/index/StartTime >=:12/EndTime <=15.json的URL,并在我查找时将StartTime和EndTime传递到条件中。

太棒了。

现在,相同的Controller具有以下附加功能:

public function view($id) {

}

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

之类的网址时,似乎会调用此函数

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

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

如果我尝试这样做,我会得到一个&#34;控制器&#34;找不到,但这种方法适用于index()

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

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

2 个答案:

答案 0 :(得分:1)

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

在这里,

  • index用于列出所有资源,例如所有博文。 URL /events/index将自动映射到控制器中的index方法。
  • view用于显示特定资源,该资源可以通过某些唯一标识符来标识,例如iduuid。具体的博客文章。网址/events/<some_identifier>已映射到view方法

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

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

答案 1 :(得分:0)

事实证明,我需要明确调用view动作来传递更多参数。

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

获取参数