用于REST API的CakePHP管理路由

时间:2014-07-24 12:09:30

标签: php rest cakephp routing admin

我的CakePHP应用程序的前端基于REST API,每个控制器都有用户和管理员方法。

我想在经典Cake视图的控制器上运行admin方法。 但如果我像这样输入浏览器URL:

http://myproject.loc/admin/cards/add/

我只得到:

{
code: 500,
name: "View file api/app/View/Cards/json/admin_add.ctp" is missing.",
message: "View file api/app/View/Cards/json/admin_add.ctp" is missing.",
url: "/admin/cards/add/"
}

问题是:

如何为管理路由设置正确的URL? (没有json前缀)

2 个答案:

答案 0 :(得分:1)

阅读Json and XML Views in CakePHP并正确阅读 。一个常见的错误是人们忘记将RequestHandler组件添加到其组件数组中。该组件将负责为您设置正确的布局并将数据序列化。

如果你真的想坚持从URL中删除.json后缀,但是通过浏览器和AJAX调用相同的URL,你必须确保你请求正确的内容类型。检查您发送的标题。

如果您只在标头中请求json(application / json)而不使用URL中的后缀,我不确定RequestHandler是否会向您发送正确的响应,它应该可以使用,试一试。< / p>

答案 1 :(得分:0)

这是参考。

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html

您需要在控制器功能中添加以下行

  

我希望您按照以下方式将其编码为json

$arrayData = array(...);//as example
class PostsController extends AppController {
    public function index() {
        $this->autoRender = false;
        $this->layout = null;
        $this->set(compact('posts', 'comments'));
    }
}

// View code - app/View/Posts/json/index.ctp
foreach ($posts as &$post) {
    unset($post['Post']['generated_html']);
}
echo json_encode(compact('posts', 'comments'));