<?php

namespace Boss\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Boss\Http\Response;
use Validator;
use Auth;
use Boss\Models\Menu;
use Boss\Common\Util;
use Boss\Models\Code;
use WebLog; class Controller extends BaseController
{
protected $validate_errors;
protected $detail;
protected $menu;
protected $isPage; //page or ajax
protected $callmethod; //post,get protected $pageSize = \Appenv::PER_PAGE; protected static $rules = [
"default" => []
];
protected static $rulesMessages = [
"default" => [
'required' => '部分参数缺失 [:attribute]',
'string' => '格式错误,期望为字符串 [:attribute]',
'integer' => '格式错误,期望为整数 [:attribute]',
'between' => '范围错误 [:attribute],要求参数在:min - :max',
'in' => '限定范围错误 [:attribute],要求参数在 :values 内',
'array' => '格式错误[:attribute] 期望为数组',
'min' => '数量不正确',
'max' => '选中数过多,最多允许:max个 [:attribute]',
'unique' => '数据重复 [:attribute]',
'exists' => '记录不存在 [:attribute]', //定义[code:xxx] 会返回$code码
'boss_afterinput' => '结束时间不应小于开始时间 [:attribute]'
]
];
protected static $rulesCodes = [
"default" => [
"Exists" => Code::ERR_DATA_NOTFIND //这里需要用大写,如果有下划线也去除boss_books => BossBooks
]
]; public function init($request = null) {
$this->isPage = (strpos($request->getPathInfo(), "/page/" ) === 0)?true:false;
$this->callmethod = $request->getMethod();
$this->controller = $request->controller;
$this->action = $request->action; $input = [
"uri" => $request->getRequestUri(),
"input" => $request->input(),
"ip" => $request->getClientIp()
];
WebLog::info($input);
//处理query case
$query = $request->query();
if(!empty($query)) {
foreach($query as $k => $v) {
if(strtolower($k) != $k) {
$request->query->add([strtolower($k) => $v]);
}
}
} $pageSize = intval($request->query("pagesize"));
if($pageSize > 0 && $pageSize <= \Appenv::MAX_PER_PAGE) {
$this->pageSize = $pageSize;
}
WebLog::debug("current pagesize ".$this->pageSize); if(defined("BOSS_DEBUG")) {
WebLog::info("boss debug enable");
\DB::enableQueryLog();
}
return $this;
} /**
* 返回用户对象
* @param string [id,account]
* @return object
*/
protected function getUserInfo($key = null) {
$user = Auth::user();
if ($key) {
return $user->$key;
}
return $user;
} /**
* 返回用户权限对应的菜单
*/
protected function getMenu() {
if (!$this->menu) {
$user = $this->getUserInfo();
if($user) {
$obj = new Menu($user->ops_ids_1);
$this->menu = $obj->getList();
}
}
return $this->menu;
} /*
* 验证规则
* @param $scence 场景
*/
protected function rules($scene = 'default') {
$rules = Util::array_merge_recursive_distinct(self::$rules,static::$rules);
$rule = $rules['default'];
if (isset($rules[$scene])) {
$rule = array_merge($rule, $rules[$scene]);
}
return $rule;
} /**
* 验证规则messages,错误描述,最终保存于detail
*/
protected function rulesMessages($scene = 'default') {
$rulesMessages = Util::array_merge_recursive_distinct(self::$rulesMessages,static::$rulesMessages);
$rulesMessage = $rulesMessages['default'];
if (isset($rulesMessages[$scene])) {
$rulesMessage = array_merge($rulesMessage, $rulesMessages[$scene]);
}
return $rulesMessage;
} /**
* 验证码
*/
protected function rulesCodes($scene = 'default') {
$rulesCodes = Util::array_merge_recursive_distinct(self::$rulesCodes,static::$rulesCodes);
$rulesCode = $rulesCodes['default'];
if (isset($rulesCodes[$scene])) {
$rulesCodes = array_merge($rulesMessage, $rulesCodes[$scene]);
}
return $rulesCode;
} protected function setDetail($value = null) {
$this->detail = $value;
} /**
* 输出
*/
protected function response($data = null){
$res = new Response();
if(!empty($this->detail)) {
$res->setDetail($this->detail);
}
if($this->isPage && $this->callmethod == "GET") {
$res->setMenu($this->getMenu());
$userinfo = $this->getUserInfo();
if($userinfo) {
$info = [
"uid" => $userinfo->id,
"nickname" => $userinfo->nickname,
"account" => $userinfo->account
];
$res->setInfo($info);
}
} if($this->controller == "auth") {
$res->showStatus();
}
return $res->send($data);
} /**
* 设置page对象
*/
protected function setPageInfo($data) {
$pageInfo = [
"totalCount" => isset($data['total']) ? $data['total'] : 0,
"pageIndex" => isset($data['current_page']) ? $data['current_page'] : 0,
"pageNum" => isset($data['per_page']) ?$data['per_page'] : 0 ,
"pageMax" => isset($data['last_page']) ? $data['last_page'] : 0
];
return $pageInfo;
} /*
* 调用validate
*/
protected function checkValidate($data, $scence = 'default', &$errors = "", &$code = Code::ERR_PARAMETER) {
$errors = "";
$code = Code::ERR_PARAMETER;
$validator = Validator::make($data, $this->rules($scence), $this->rulesMessages($scence));
if($validator->fails()) {
$rulesCode = $this->rulesCodes($scence);
$failed = $validator->failed();
/**
* array:1 [
* "id" => array:1 [
* "Exists" => array:4 [
* 0 => "cms_free_topic"
* 1 => "id"
* 2 => "is_del"
* 3 => "0"
* ]
* ]
* ]
*/
$findRule = 0;
foreach($failed as $v) {
foreach($v as $rule => $vv) {
if(isset($rulesCode[$rule])) {
$findRule = 1;
$code = $rulesCode[$rule];
break;
}
}
if($findRule) {
break;
}
} Weblog::debug($failed);
$errors = $validator->errors()->all();
$this->validate_errors = $errors;
$this->setDetail($errors);
return false;
}
return true;
} /**
*
*/
protected function formatList($data) {
$data = [
"pageInfo" => $this->setPageInfo($data),
"listInfo" => isset($data['data']) ? $data['data'] : array()
];
return $data;
} protected function getPageInfo($list){
$list = $list->toArray();
return $this->setPageInfo($list);
}
}

  

laravel controller重写的更多相关文章

  1. Laravel Controller中引入第三方类库

    Laravel 引入第三方类库 在Controller中引入自定义的php文件,先在app目录下创建一个新的文件夹,命名Tools(可自定义),接着创建一个MyTest.php: <?php c ...

  2. How to return AJAX errors from Laravel Controller?

    Questions: I am building a REST API with Laravel 5. In Laravel 5, you can subclassApp\Http\Requests\ ...

  3. How to use external classes and PHP files in Laravel Controller?

    By: Povilas Korop Laravel is an MVC framework with its own folder structure, but sometimes we want t ...

  4. nginx下配置laravel+rewrite重写

    server { listen ; server_name ha.d51v.cn; #access_log /data/wwwlogs/access_nginx.log combined; root ...

  5. laravel controller:make

    php artisan make:controller DIR/XXXController

  6. How to change and add some params to request in Laravel controller?

    $request->merge([ 'aae_id' => request('id', 0), 'foo' => 'bar', ]);

  7. nginx配置laravel lumen重写

    location / { try_files $uri $uri/ /index.php?$query_string;}

  8. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...

  9. 在laravel中使用支付宝手机网站支付 和 支付宝退款

    1.在蚂蚁金服开放平台中申请对应的应用,并根据提示进行签约 2.给对应的应用信息 生成私钥和公钥(私钥会保存在本地,公钥会放在对应的应用信息中) 3.下载手机网站支付 对应的php sdk 4.将sd ...

随机推荐

  1. WPF 将TextBox更改为PasswordBox样式(文字显示方式为密码)

    在TextBox样式中增加如下所诉: <Style x:Key="TxtPwd" TargetType="{x:Type TextBox}"> &l ...

  2. 虹软人脸识别在 linux中so文件加载不到的问题

    其实是可以加载到的,不过是so文件放的位置不一对,最简单的方式是放在 /usr/lib64 目录下,也可自己设置. so文件加载不到会报这个错误:    .lang.UnsatisfiedLinkEr ...

  3. EF4.4增删改查实例

    第一.先创建一个名为Store数据库,将下面脚本代码执行创建表: USE [Store] GO /****** Object: Table [dbo].[Category] Script Date: ...

  4. i.mx6 Android5.1.1 vibrator系统服务流程

    0. 概述 0.1 小结 下面来从APP一直分析到kernel的driver,因为vibrator是我所知的最简单的系统服务,分析过程过来,可以获取整个安卓服务的运行思路,把相关知识点都串联起来,又不 ...

  5. Redis常用命令整理

    doc 环境下使用命令:       keys 命令         ?    匹配一个字符         *    匹配任意个(包括0个)字符         []    匹配括号间的任一个字符, ...

  6. node错误集合

    1.端口被占用 node .\app.js events.js:167 throw er; // Unhandled 'error' even 解决办法:8888端口被占用了,更改一个端口就好 2. ...

  7. ajax success和error接收了哪些状态码

    ajax和 Http Status 之前一直奇怪ajax发送请求后success 和 error 分界的状态码是多少, 主要很多将ajax的教程也没有提到, 例如, 我用ResponseEntity& ...

  8. PowerDesigner16导出SQL时如何添加注释

    添加注释方法 https://jingyan.baidu.com/article/47a29f24652e44c0142399c3.html 重点是修改value的值 alter table [%QU ...

  9. java设计模式-观察者模式,装饰者模式

    1.1定义 慨念:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 即:主题和观察者定义了一对多的关系,观察者依赖于主题,只要主题发生变化,观察者就 ...

  10. HTML标签类型

    标签分类: 一.块标签:块标签是指本身属性为display:block;的元素. 1.默认占一行可以设置宽高, 2.在不设置宽度的情况下,块级元素的宽度是它父级元素内容的宽度 3.在不设置高度的情况下 ...