扩展处理类型
CP的视图控制器除了HTML外, 还支持JSON和XML, 除此之外还可以自定义处理类型.
指定处理类型
app配置文件sys
中的display
, 用于指定当前的视图处理类型
/**
* 系统设置
*/
'sys' => array(
/**
* Http会话认证方式
* 默认支持 COOKIE 和 SESSION, 也可以指定为自定义的类
* 如: '\lib\MysqlSession' 或 new \lib\MysqlSession()
*/
'auth' => 'COOKIE',
/**
* 默认的template路径
*/
'default_tpl_dir' => 'default',
/**
* 指定View输出的方法,默认是HTML.
* 如果值为JSON或XML的时候,会直接调用View中的JSON或XML方法来输出数据
* 也可以在View中自定义处理方法(比如RSS等)
*/
'display' => 'HTML'
),
默认值是HTML
, 这是一个标识, 代表需要处理HTML页面, 需要加载layer
XML / JSON
当指定类型为XML
或JSON
时, 会自动调用Cross\MVC\View
中的XML()
或JSON()
方法来处理数据, 并发送合适的HTTP头
/**
* 输出JSON
*
* @param $data
*/
function JSON($data)
{
Response::getInstance()->setContentType('json');
echo json_encode($data);
}
/**
* 输出XML
*
* @param $data
* @param string $root_name
*/
function XML($data, $root_name = 'root')
{
Response::getInstance()->setContentType('xml');
$xml = Array2XML::createXML($root_name, $data);
echo $xml->saveXML();
}
当需要自定义JSON
或XML
处理方法时, 在项目的视图控制器基类中覆盖这两个方法即可.
自定义处理类型
除了默认的XML
,JSON
外, 我们还可以为display
自定义一个值, 并在视图控制器中添加相应的方法来处理数据, 比如我们要为api
指定处理数据的类型是MSGPACK
, 先修改display
的值
/**
* 系统设置
*/
'sys' => array(
/**
* Http会话认证方式
* 默认支持 COOKIE 和 SESSION, 也可以指定为自定义的类
* 如: '\lib\MysqlSession' 或 new \lib\MysqlSession()
*/
'auth' => 'COOKIE',
/**
* 默认的template路径
*/
'default_tpl_dir' => 'default',
/**
* 指定View输出的方法,默认是HTML.
* 如果值为JSON或XML的时候,会直接调用View中的JSON或XML方法来输出数据
* 也可以在View中自定义处理方法(比如RSS等)
*/
'display' => 'MSGPACH'
),
然后在ApiView
中新增一个方法
namespace app\api\views;
use Cross\MVC\View;
/**
* @Auth: wonli <wonli@live.com>
* Class ApiView
* @package app\api\views
*/
class ApiView extends View
{
function MSGPACK($data)
{
echo msgpack_pack($data);
}
}
到此就完成对MSG_PACK
的支持了, 通过灵活的扩展, 我们可以支持未来的任何格式, 关于MSG PACK
, 详见他们官网 http://msgpack.org/