## 基类的实战应用---底层方法的封装 ### 一 底层常用代码的封装 > 在控制器中基类的起着至关重要的作用,整个项目的代码安全,复杂程度,易读性都要看你项目的基类架构的. 举个例子来说在项目中,特别是API中,往往在服务器端客户端通讯都需要有一个错误码 那么这个通讯码的构造方法 也是我们最长用的,那么我们是不是应该写到基类里呢? Ok 那我们在控制器里建立一个基类,我个人喜欢Base这个命名 OK 我就把我写的方法复制进来了 还有一个不返回值的别名函数 ~~~ <?php /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017/4/17 * Time: 9:33 */ namespace app\member\controller; class Base extends \app\base\controller\Base { /** * Power by Mikkle * QQ:776329498 * @param string $code * @param array $data * @param string $msg * @return array */ static public function showReturnCode($code = '', $data = [], $msg = '') { $return_data = [ 'code' => '500', 'msg' => '未定义消息', 'data' => $code == 1001 ? $data : [], ]; if (empty($code)) return $return_data; $return_data['code'] = $code; if(!empty($msg)){ $return_data['msg'] = $msg; }else if (isset(ReturnCode::$return_code[$code]) ) { $return_data['msg'] = ReturnCode::$return_code[$code]; } return $return_data; } static public function showReturnCodeWithOutData($code = '', $msg = '') { return self::showReturnCode($code,[],$msg); } } ~~~ ReturnCode 的源代码 >[info] 这个返回码是每个项目初期设定的,项目越大越复杂,这个返回码可能也越多, > 大项目或者多语言项目可以结合Lang语言包配合使用 我这里只做一个简单的示例 不再过多说明了 ~~~ <?php /** * Created by PhpStorm. * Power by Mikkle * QQ:776329498 * Date: 2017/4/14 * Time: 10:09 */ namespace app\base\controller; class ReturnCode { /** * Power by Mikkle * QQ:776329498 * @param $code * @param $data * @param $msg */ static public $return_code = [ '1001' => '操作成功', '1002' => '你想做什么呢', //非法的请求方式 非ajax '1003' => '请求参数错误', //如参数不完整,类型不正确 '1004' => '请先登陆再访问', //未登录 或者 未授权 '1005' => '请求授权不符', ////非法的请求 无授权查看 '1006' => '数据加载失败', // '1010' => '数据不存在', // '1020' => '验证码输入不正确', // '1021' => '用户账号或密码错误', // '1022' => '用户账号被禁用', // '1030' => '数据操作失败', // ]; } ~~~ Ok 那么我们的控制器继承了基类了,我们就可以轻松调用这些方法了 下面一段就是控制器里的方法 ~~~ /** * 获取用户信息 * Power by Mikkle * QQ:776329498 * @return array */ private function getUid(){ //数据库字段 网页字段转换 $param = [ 'userid' => 'userid', 'userpwd' => 'userpwd', 'mobile' => 'mobile', ]; $param_data = $this->buildParam($param); if (empty($param_data['userid'])&&empty($param_data['mobile'])) return self::showReturnCodeWithOutData(1003); $check_login = $this->doModelAction($param_data, 'base/Member.login', 'base/Member', 'checkLogin'); if (!isset($check_login['code'])) $this->showReturnCodeWithSaveLog(1111); if ($check_login['code'] == 1001) { } return $check_login; } ~~~