【问题标题】:Preventing default views with RESTful api in CakePHP在 CakePHP 中使用 RESTful api 防止默认视图
【发布时间】:2011-12-08 11:31:52
【问题描述】:

我正在关注tutorial in the CakePHP book,它解释了设置 RESTful Web 服务的基础知识。

到目前为止,我已将路线文件更新为以下内容:

Router::mapResources('stores');
Router::parseExtensions('json');

我还在 app/layouts/json 和相应的 json 视图中设置了一个空白布局。当我导航到 controller/action.json 时,我成功接收到了我的 json 输出

我想知道,如果没有 .json 扩展名,它会尝试加载常规视图。我正在寻找一个只有 json 输出的纯 api,有没有办法阻止常规渲染输出?

【问题讨论】:

    标签: json cakephp rest


    【解决方案1】:

    如果您可以通过其他方式识别 JSON 请求,则可以强制呈现为 JSON。例如,如果 Accepts HTTP 标头包含 application/json,您可以将其放在您的控制器中:

    public function beforeFilter(){
        if ($this->request->accepts('application/json')) {
            $this->RequestHandler->renderAs($this, 'json');
        }
        parent::beforeFilter();
    }
    

    这是 CakePHP 2.0 表示法,但对于 CakePHP 1.2 和 1.3 可能存在类似的符号。

    您也可以改为检测请求的 Content-Type,或者也可以检测,尤其是在未使用 Accepts 的情况下。

    【讨论】:

    • 谢谢。我通过省略“if”让它工作了,只做了: $this->RequestHandler->renderAs($this, 'json');父::beforeFilter();
    【解决方案2】:

    你现在看到了什么?如果您使用过 bake Cake,可能已经为您生成了视图?

    只需删除/app/views/layout/app/views/controllername中的视图

    如果您试图完全阻止请求到达控制器,那么我不太确定,您可以更新您的 .htaccess 文件以仅将请求以 .json 结尾的请求发送到应用程序或类似的东西。

    【讨论】:

    • 我已经从每个位置删除了视图,我只有我的 json 文件夹。但是,当我在操作后导航到没有 .json 的控制器时,蛋糕给了我一个缺失的视图错误。
    • 你可以更新 .htaccess 所以 apache 只重写匹配 *.json 的请求
    • 我确实考虑过,认为如果你构建一个纯 API,Cake 可能有办法锁定它。
    【解决方案3】:

    这就是我所做的。

    如果我知道我只构建 json API,我将以下内容添加到我的 AppController.php:

    public function beforeFilter()
    {
        if (empty($this->request->params['ext']) || $this->request->params['ext'] != "json")
        {
            $this->render(FALSE, 'maintenance'); //no view, only layout
            $this->response->send();
            $this->_stop();
        }
    }
    

    在我的 /app/Layouts/maintenance.ctp 中

    echo __('Invalid extension');
    

    这样,所有没有 json 扩展名的请求最终都会出现在“维护”页面上,您可以在其中放置您想要的任何信息,我打算在那里放置 API 文档的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多