返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

[CakePHP]如何关闭API页面的调试信息

时间:2013-04-28 00:11来源:知行网www.zhixing123.cn 编辑:麦田守望者

使用CakePHP开发时,免不了要将调试级别设置为2,这样页面上会显示出执行的SQL语句及结果,很方便。但在做API页面时就比较麻烦。一般API页面的输出结果是XML或者JSON格式,如果后面多了些调试信息,客户端就无法正确解析了。

解决方法很简单,只要在API的action函数中改写调试等级即可:

function api_index() {
  ...
  Configure::write('debug', 0);
}

不过,每个action都要写这么一行,太麻烦了。能不能想个办法,自动地关闭所有API页面的调试信息? 可以仿照管理界面的方式。管理界面的URL为/admin/posts/index,这样就可以自动调用PostsControlleradmin_index()函数。类似地,我们可以把所有 API 的URL都写成/api/posts/index,让CakePHP自动调用PostsControllerapi_index()函数。只需在 config/routes.php 中添加下面一行:

Router::connect('/api/:controller/:action/*', array('prefix' => 'api', 'api' => true));

简单说明一下:上述路径中的 :controller:action 为系统默认的路径元素,只需写在适当的位置,CakePHP即可识别出Controller和Action。 prefix选项指定action函数的前缀为API,这样系统就会调用 api_index()函数。最后的 'api' => true 是个标志,加上以后,传给 action 的 $this->params 数组中就会出现 'api' => true 这个值,稍后我们会用到它。

接下来新建 /api_controller.php 文件,如果已存在,就修改一下:

<?php
class AppController extends Controller {

  function beforeFilter() {
    // 如果是API请求,则关闭调试信息
    if (isset($this->params['api'])) {
      $this->layout = 'api';
      $debug = Configure::read('debug');
      if ($debug > 0) {
        Configure::write('debug', 0);
      }
    }
  }
}
?>

使用beforeFilter()函数,在请求到达真正的action函数之前,判断是否为API请求,如果是,就将页面布局设置为 ‘api’,再关闭调试信息。

当然,别忘了建立 /pages/layouts/api.ctp 文件,只需一行:

<?php echo $content_for_layout ?>

这样,以后访问API时只要写成 /api/controller/action 即可,系统会自动关闭调试信息,并自动应用API的页面模板。

------分隔线----------------------------
标签(Tag):php php教程 php实例教程 php5 php源代码 php基础教程 php技巧 php6
------分隔线----------------------------
推荐内容
猜你感兴趣