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