【问题标题】:CakePHP admin routing for REST APIREST API 的 CakePHP 管理路由
【发布时间】:2014-09-15 23:37:23
【问题描述】:

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

我想在具有经典蛋糕视图的控制器上运行管理方法。 但是,如果我像这样输入浏览器 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前缀)

【问题讨论】:

  • 为什么要去掉.json后缀?使用它会让事情变得更容易。

标签: php rest cakephp routing admin


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这是参考。

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

    【讨论】:

    • 但不使用 $this->autoRender = false;我自动使用 JSON 输出作为全局设置。
    • 你是通过控制器函数 r8 返回输出吗??
    • 全局设置是什么意思?可以把代码贴在这里吗?
    猜你喜欢
    • 2013-05-29
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多