消息设置
系统或用户经常会产生一些消息(错误、通知、提示等),该类消息主要由 msg类 产生,然后借助 view类 以多种格式输出,所以也可以直接用view类的msg()等方法输出。
输出格式
有时因为需要以不同格式输出消息,比如前端在以json格式获取数据,数据输出之前如果产生错误消息,那么也需要以json格式输出(错误码会自动作为Json的code),便于前端判断:
- 1.配置 MSG_TYPE 指定默认输出类型,作用域最广(整个实例),优先级最低(可被动态覆盖)
- 2.在请求URL中添加 _msg 参数(参数名称可由 MSG_TYPE_VAR 配置)来指定,也可以添加在表单的action或隐藏域中
- 3.在程序中用 msg::set_type() 方法来指定,在同一页面中只需设置一次即可
- 4.消息都是借助view类输出,可以直接使用view类中的相应方法,比如:$this->view->json()
优先级从1-4依次增大,后面覆盖前面
输出消息 code 字段为0表示无错,不为0时 msg 字段为具体错误;前端程序务必要先判断json对象是否存在,只要对象存在,其中 code 字段一定为数字。
消息输出格式(type)有以下值:
- xml:以XML格式输出
- json:以JSON格式输出
- str:以HTML片段输出
- msg:使用消息模板输出
- cli:命令行下输出
- jsonp:以JSONP格式输出
输出的消息 msg 字段中出现日志跟踪,关闭 DEBUG 即可:'DEBUG' => false
自定义模板
当消息输出格式:type=msg 时,可以使用模板,这也是默认的输出方式。系统(msg类)默认只产生两类消息:info和error,其模板位于 boa/view/msg 目录下,用户也可以在 www/tpl/模块/msg 目录下为其定制模板,系统优先使用用户模板。 除了info和error,如果想添加新的消息类型,比如:notice
- 1.使用语言包,比如在home模块language/zh-cn目录中添加notice.php文件如下,然后使用 msg::set('home.notice.test'),最后定制 notice 模板
return [ 'test' => '...', ... ];
- 2.直接使用:$this->view->msg($msg, 'notice', $data),然后定制 notice 模板
控制消息输出
msg类设置的消息会立即输出,并会终止后续程序的执行,有时我们需要手动控制消息输出
msg::begin(); // 关闭消息自动输出
echo '......';
msg::set('boa.error.1', '错误1');
echo '......';
msg::set('boa.error.2', '错误2');
echo '......';
msg::commit(); // 手动确认输出,上面echo的内容并不会输出