4

完全に機能する CakePHP Web アプリケーションを作成しました。今、私はそれを次のレベルに上げて、私のアプリをより「開かれた」ものにしたいと思っています. したがって、RESTful API を作成したいと考えています。CakePHP のドキュメントで、アプリを RESTful にする方法を説明するこのリンク ( http://book.cakephp.org/2.0/en/development/rest.html ) を見つけました。リンクの上部に記載されているように、routes.php に必要な 2 行を追加したので、テストしたいと思います。データベースに新しいユーザーを追加する関数 add() がある UsersController.php コントローラーがあります。しかし、mydomain.com/users.json の下をブラウズしようとすると (HTTP POST を使用しても)、予想どおり、json 形式のページではなく、Web ページが返されます。

今、私は何か間違ったことをしたか、何かを正しく理解していないと思います。実際に何が起こっているのか、ここで少し手伝ってもらえますか?

よろしくお願いします!

4

1 に答える 1

9

JSON 拡張機能を解析する必要があります。したがって、routes.phpファイルに以下を追加します。

Router::parseExtensions('json');

したがって、 http://example.com/news/index のような URL は、http://example.com/news/index.jsonようにアクセスできます。

ただし、実際に JSON を返すには、コントローラー メソッドを修正する必要があります。アクションにキーを設定する必要がある_serializeため、ニュース コントローラーは次のようになります。

<?php
class NewsController extends AppController {

    public function index() {
        $news = $this->paginate('News');
        $this->set('news', $news);
        $this->set('_serialize', array('news'));
    }
}

それが基本です。POST リクエストの場合は、RequestHandlerコンポーネントを使用する必要があります。コントローラーに追加します。

<?php
class NewsController extends AppController {

    public $components = array(
        'RequestHandler',
        ...
    );

そして、着信要求が.jsonファイル拡張子を使用したかどうかを確認できます。

public function add() {
    if ($this->RequestHandler->extension == 'json') {
        // JSON request
    } else {
        // do things as normal
    }
}
于 2013-08-19T13:45:54.107 に答える