2012-07-29 1 views
0

Я пытаюсь разработать простые веб-сервисы в CakePHP 2.1. Таким образом, я создал первый DB таблицу:CakePHP и RESTful webservices

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') 
     )); 
    } 
} 

и, наконец, в маршрутах. php, я сопоставил правильную точку рота:

<?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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;autoRender&nbsp;=&nbsp;false;</span></code> 
<code><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;View&nbsp;=&nbsp;$View;</span></code> 
<span class="code-highlight"><code><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;response-&gt;body($View-&gt;render($view,&nbsp;$layout));</span></code></span></pre><pre id="cakeErr501541d86308c-context" class="cake-context" style="display: none;">$view = null 
$layout = null 
$serialize = array(
    (int) 0 =&gt; &#039;person&#039; 
) 
$data = array() 
$key = &#039;person&#039;</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} 

Где ошибка?

ответ

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

Ошибка ясно показывает, что набор $ Serialize, а не $ _serialize viewVar

использование «_serialize», как у вас есть в вашем примере кода самостоятельно.

Также убедитесь, что var, который вы хотите сериализовать, соответствует представленному viewVar.

вы сериализуете $ человека, в то время как вы устанавливаете $ people