我对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.json
和MonitorId =:3
作为参数传递,以便在视图中处理。我不想要将这些添加到函数定义中 - 它可以是任何东西。
如果我尝试这样做,我会得到一个&#34;控制器&#34;找不到,但这种方法适用于index()
有人可以帮助我实现目标并帮助解释发生了什么吗?
(如果有帮助,控制器的完整代码为here)
答案 0 :(得分:1)
正如我所看到的,您正在使用CakePHP RESTful路由routes.php
在这里,
index
用于列出所有资源,例如所有博文。 URL /events/index
将自动映射到控制器中的index
方法。view
用于显示特定资源,该资源可以通过某些唯一标识符来标识,例如id
或uuid
。具体的博客文章。网址/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'];