我正在尝试在CakePHP 2.1中开发一个简单的Web服务。所以,我首先创建了一个数据库表:
CREATE TABLE IF NOT EXISTS `people` (
`id` char(36) COLLATE utf8_bin NOT NULL,
`first_name` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`last_name` varchar(100) COLLATE utf8_bin NOT NULL,
`home_address` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`job_address` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`phone` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`fax` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`mail` varchar(100) COLLATE utf8_bin DEFAULT NULL,
`birth_date` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
我创建了一个简单的Person模型:
<?php
class Person extends AppModel {
public $name = 'Person';
}
各自的控制人员:
<?php
class PeopleController extends AppController {
public $components = array('RequestHandler');
public function index() {
$people = $this->Person->find('all');
$this->set(array(
'people' => $people,
'_serialize' => array('person')
));
}
}
最后,在routes.php中,我已经映射了正确的roote:
<?php
Router::mapResources('people');
Router::parseExtensions('json');
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
但是当我尝试联系ht_tp://localhost/cakephp/people.json时,我得到:
<pre class="cake-error"><a href="javascript:void(0);" onclick="document.getElementById('cakeErr501541d86308c-trace').style.display = (document.getElementById('cakeErr501541d86308c-trace').style.display == 'none' ? '' : 'none');"><b>Notice</b> (8)</a>: Undefined index: person [<b>CORE\Cake\View\JsonView.php</b>, line <b>89</b>]<div id="cakeErr501541d86308c-trace" class="cake-stack-trace" style="display: none;"><a href="javascript:void(0);" onclick="document.getElementById('cakeErr501541d86308c-code').style.display = (document.getElementById('cakeErr501541d86308c-code').style.display == 'none' ? '' : 'none')">Code</a> <a href="javascript:void(0);" onclick="document.getElementById('cakeErr501541d86308c-context').style.display = (document.getElementById('cakeErr501541d86308c-context').style.display == 'none' ? '' : 'none')">Context</a><pre id="cakeErr501541d86308c-code" class="cake-code-dump" style="display: none;"><code><span style="color: #000000"> $this->autoRender = false;</span></code>
<code><span style="color: #000000"> $this->View = $View;</span></code>
<span class="code-highlight"><code><span style="color: #000000"> $this->response->body($View->render($view, $layout));</span></code></span></pre><pre id="cakeErr501541d86308c-context" class="cake-context" style="display: none;">$view = null
$layout = null
$serialize = array(
(int) 0 => 'person'
)
$data = array()
$key = 'person'</pre><pre class="stack-trace">JsonView::render() - CORE\Cake\View\JsonView.php, line 89
Controller::render() - CORE\Cake\Controller\Controller.php, line 957
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 193
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161
[main] - APP\webroot\index.php, line 92</pre></div></pre>{"person":null}
错误在哪里?
答案 0 :(得分:1)
正如您所看到的,您获得的回复是HTML。它所说的内容(当你在浏览器中打开它时)是:
Notice (8): Undefined index: person [CORE\Cake\View\JsonView.php, line 89]
Code Context
JsonView::render() - CORE\Cake\View\JsonView.php, line 89
Controller::render() - CORE\Cake\Controller\Controller.php, line 957
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 193
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161
[main] - APP\webroot\index.php, line 92
{"person":null}
你在数据库中有记录吗? 那个方法的观点呢?它应该是这样的:
// app/View/People/json/index.ctp
<?php
echo json_encode(compact('people'));
请注意,index.ctp文件位于 json 子文件夹中。 查看JSON and XML views上的书,并评论是否还有其他问题。
答案 1 :(得分:1)
错误清楚地显示您已设置$ serialize,而不是$ _serialize viewVar
像你自己的代码示例一样使用'_serialize'。
还要确保要序列化的var与存在的viewVar匹配。
你在设置$ people
时序列化$ person