作者 赵彬吉

update

... ... @@ -4,25 +4,25 @@ namespace App\Http\Controllers\Aside;
use App\Enums\Common\Code;
use App\Http\Controllers\Controller;
use App\Utils\EncryptUtils;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Support\Facades\Session;
class BaseController extends Controller
class BaseController extends Controller
{
protected $param = [];//所有请求参数
protected $token = ''; //token
protected $request = [];//助手函数
protected $p = 1;//当前页
protected $allCount = 0;//总条数
protected $page = 1;//当前页
protected $row = 20;//每页条数
protected $header = [];//设置请求头参数
protected $order = 'id';
protected $map = [];//处理后的参数
protected $uid = 0;
protected $user = [];//当前登录用户详情
/**
* 获取所有参数
*/
... ... @@ -30,32 +30,24 @@ class BaseController extends Controller
{
$this->request = $request;
$this->param = $this->request->all();
$this->token = $this->request->header('token');
$this->get_param();
$this->auth_token();
}
/**
* @name
* @return void
* @author :liyuhang
* @method
* @return mixed
* @author zbj
* @date 2023/4/19
*/
public function auth_token(){
$info = Cache::get($this->token);
if(isset($info) && !empty($info)){
$this->user = $info;
$this->uid = $info['id'];
}
public function manage(){
return Session::get('manage');
}
/**
* 成功返回
* @param array $data
* @param string $code
* @param bool $objectData
* @return JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
function success(array $data = [], string $code = Code::SUCCESS, bool $objectData = false): JsonResponse
{
... ... @@ -68,16 +60,8 @@ class BaseController extends Controller
'data' => $data,
'msg' => $code->description,
];
//加密-返回数据
if (config('app.params_encrypt')) {
$k = config('app.params_encrypt_key');
$i = config('app.params_encrypt_iv');
$response = [
'p' => (new EncryptUtils())->openssl_en($response, $k, $i)];
}
return response()->json($response,200,$this->header);
}
/**
* @name 参数过滤
* @return void
... ... @@ -94,20 +78,23 @@ class BaseController extends Controller
case "order":
$this->order = $v;
break;
case 'p':
$this->p = $v;
case 'page':
$this->page = $v;
break;
case 'row':
$this->row = $v;
break;
case "created_at":
case "name":
$this->map['name'] = ['like','%'.$v.'%'];
break;
case "start_at":
$this->_btw[0] = $v;
$this->_btw[1] = date('Y-m-d H:i:s',time());
$this->map['create_at'] = ['between', $this->_btw];
$this->map['created_at'] = ['between', $this->_btw];
break;
case "updated_at":
case "end_at":
$this->_btw[1] = $v;
$this->map['update_at'] = ['between', $this->_btw];
$this->map['updated_at'] = ['between', $this->_btw];
break;
default:
if (!empty($v)) {
... ... @@ -116,46 +103,24 @@ class BaseController extends Controller
break;
}
}
}
/**
* @name 统一返回参数
* @return void
* @return JsonResponse
* @author :liyuhang
* @method
*/
public function response($msg,$code = 200,$data = [],$result_code = null,$type = 'application/json'){
$result_code === null && $result_code = $code;
public function response($msg = null,string $code = Code::SUCCESS,$data = [],$result_code = 200,$type = 'application/json'): JsonResponse
{
$code = Code::fromValue($code);
$result = [
'msg' =>$msg,
'code'=>$result_code,
'data'=>$data
'msg' => $msg == ' ' ? $code->description : $msg,
'code' => $code->value,
'data' => $data,
];
$this->header['Content-Type'] = $type;
$this->header['token'] = $this->token;
$response = response($result,$result_code,$this->header);;
throw new HttpResponseException($response);
}
/**
* @name :上传图片
* @return void
* @author :liyuhang
* @method
*/
public function uploads(){
$files = $this->request->file('file');
if(empty($files)){
return $this->response('没有上传文件',Code::USER_ERROR);
}
$url = './uploads/images/';
$param = $this->request->post();
if($this->request->hasFile('image') && $files->isValid()){
$filename = date('ymdHis').rand(10000,99999).$this->request->file('image');
$this->request->file('image')->move('./uploads/images/',$filename);
}else{
return false;
}
return $url.$filename;
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\DemoLogic;
use App\Http\Requests\Aside\DemoRequest;
class DemoController extends BaseController
{
/**
* Deom控制器
* @param DemoRequest $request
* @param DemoLogic $logic
* @return \Illuminate\Http\JsonResponse
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function test(DemoRequest $request,DemoLogic $logic)
{
$request->validated();
$data=$logic->testLogic();
return $this->success($data);
}
}
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
/**
* Class IndexController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class IndexController extends Controller
{
/**
* 首页
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Logic\Aside\LoginLogic;
use App\Rules\Mobile;
use Illuminate\Http\Request;
/**
* Class LoginController
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class LoginController extends BaseController
{
function login(Request $request, LoginLogic $logic)
{
if ($request->isMethod('POST')) {
$request->validate([
'mobile' => ['required', new Mobile()],
'password' => 'required',
], [
'mobile.required' => '请输入手机号',
'password.required' => '请输入密码',
]);
$logic->login();
return $this->success();
}
return view('admin.login');
}
public function logout(LoginLogic $logic)
{
return $logic->logout();
}
}
... ...
<?php
namespace App\Http\Controllers\Aside;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
/**
* Class Menu
* @package App\Http\Controllers\Aside
* @author zbj
* @date 2023/4/19
*/
class MenuController extends Controller
{
/**
* 菜单列表
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
echo 111;
}
}
... ...
... ... @@ -2,35 +2,21 @@
namespace App\Http\Logic\Aside;
use App\Enums\Common\Code;
use App\Exceptions\AsideGlobalException;
use App\Http\Logic\Logic;
/**
* @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
* Class BaseLogic
* @package App\Http\Logic\Aside
*/
class BaseLogic
class BaseLogic extends Logic
{
protected $requestAll;
public function __construct()
{
$this->requestAll=request()->all();
}
protected $requestAll;
/**
* @notes: 统一格式化分页返回
* @return array
*/
function getPageData($pagninate): array
public function __construct()
{
$p = $pagninate->toArray();
$result['list'] = $p ['data'];
$result['pager']['total'] = $p ['total'];
$result['pager']['page'] = $p ['current_page'];
$result['pager']['pagesize'] = $p ['per_page'];
return $result;
$this->requestAll = request()->all();
}
}
... ...
<?php
namespace App\Http\Logic\Aside;
class DemoLogic extends BaseLogic
{
protected $requestAll;
public function __construct()
{
$this->requestAll=request()->all();
}
public function testLogic():array
{
return $this->success($this->requestAll);
}
}
<?php
namespace App\Http\Logic\Aside;
use App\Models\Manage;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
/**
* Class LoginLogic
* @package App\Http\Logic\Aside
* @author zbj
* @date 2023/4/19
*/
class LoginLogic extends BaseLogic
{
public function __construct()
{
parent::__construct();
$this->model = new Manage();
}
public function login()
{
$info = $this->model->where('mobile', $this->requestAll['mobile'])->first();
if (!$info){
$this->fail('登录用户名不存在');
}
if (Manage::STATUS_DISABLE == $info->status) {
$this->fail('帐号已被禁用');
}
if (!Hash::check($this->requestAll['password'], $info->password)) {
$this->fail('登录密码不正确');
}
Session::put('manage', $info->toArray());
return $this->success();
}
public function logout(){
Session::forget('manage');
return redirect(route('admin.login'));
}
}
... ...
... ... @@ -2,24 +2,20 @@
namespace App\Http\Logic\Bside;
use App\Enums\Common\Code;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Http\Logic\Logic;
use Illuminate\Support\Facades\Cache;
/**
* @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
*/
class BaseLogic
class BaseLogic extends Logic
{
protected $model;
protected $requestAll;
protected $requestAll;
protected $user;
protected $is_cache = true; //是否缓存数据
public function __construct()
{
$this->requestAll = request()->all();
... ... @@ -27,27 +23,6 @@ class BaseLogic
$this->user = Cache::get(request()->header('token'));
}
/**
* @notes: 请简要描述方法功能
* @param array $data
* @return array
*/
public function success(array $data = [])
{
return $data;
}
/**
* @notes: 错误抛出
* @param string $code
* @param string $message
* @throws BsideGlobalException
*/
public function fail(string $message = "", string $code = Code::SYSTEM_ERROR)
{
throw new BsideGlobalException($code, $message);
}
/**
* 列表
... ... @@ -62,41 +37,7 @@ class BaseLogic
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
$map[] = ['project_id' => $this->user['project_id']];
// 闭包查询条件格式化
$query = $this->formatQuery($map);
// 排序(支持多重排序)
$query = $query->when($sort, function ($query, $sort) {
foreach ($sort as $k=>$v) {
$query->orderBy($k, $v);
}
});
// 数据分页设置
if ($limit) {
$result = $query->select($columns)->paginate($limit);
}else{
$result = $query->select($columns)->get();
}
return $this->success($result ? $result->toArray() : []);
}
/**
* 详情
* @param $id
* @return array
* @author zbj
* @date 2023/4/13
*/
public function getInfo($id)
{
$info = $this->getCacheInfo($id);
if(!$info){
$this->fail('数据不存在或者已经删除');
}
return $this->success($info->toArray());
return parent::getList($map, $sort, $columns, $limit);
}
/**
... ... @@ -105,19 +46,10 @@ class BaseLogic
* @author zbj
* @date 2023/4/15
*/
public function getCacheInfo($id){
if($this->is_cache){
$info = Cache::get($this->getInfoCacheKey($id));
if (!$info) {
$info = $this->model->find($id);
if($info){
Cache::put($this->getInfoCacheKey($id), $info);
}
}
}else{
$info = $this->model->find($id);
}
if($info && $info['project_id'] != $this->user['project_id']) {
public function getCacheInfo($id)
{
$info = parent::getCacheInfo($id);
if ($info && $info['project_id'] != $this->user['project_id']) {
$info = null;
}
return $info;
... ... @@ -131,177 +63,23 @@ class BaseLogic
* @author zbj
* @date 2023/4/13
*/
public function save($param){
if(!empty($param['id'])){
$this->model = $this->getCacheInfo($param['id']);
if(!$this->model){
$this->fail('数据不存在或者已经删除');
}
}
public function save($param)
{
$param['project_id'] = $this->user['project_id'];
foreach ($param as $name => $value){
$this->model[$name] = $value;
}
$res = $this->model->save();
if($res){
//清缓存
if($this->is_cache && !empty($param['id'])){
Cache::forget($this->getInfoCacheKey($param['id']));
}
return $this->success(['id' => $this->model->id]); //返回保存的数据id
}else{
$this->fail('保存失败');
}
return parent::save($param);
}
/**
* 批量删除
* @param $ids
* @param array $map
* @return array
* @throws BsideGlobalException
* @author zbj
* @date 2023/4/13
*/
public function delete($ids){
$ids = array_filter(Arr::splitFilterToArray($ids), 'intval');
if(!$ids){
$this->fail('ID不能为空');
}
$map[] = ['id', 'in', $ids];
$map[] = ['project_id' => $this->user['project_id']];
$res = $this->formatQuery($map)->delete();
if($res){
if($this->is_cache){
foreach ($ids as $id){
Cache::forget($this->getInfoCacheKey($id));
}
}
return $this->success();
}else{
$this->fail('删除失败');
}
}
/**
* @param $id
* @return string
* @author zbj
* @date 2023/4/13
*/
public function getInfoCacheKey($id){
return $this->model->getTable() . '_info_' . $id;
}
/**
* 格式化查询条件
* @param $map
* @param $query
* @return mixed
* @author zbj
* @date 2023/4/13
*/
public function formatQuery($map, $query = '')
public function delete($ids, $map = [])
{
$model = $query ?: $this->model;
$query = $model->where(function ($query) use ($map) {
foreach ($map as $v) {
if ($v instanceof \Closure) {
$query = $query->where($v);
continue;
}
// 判断是否是键值对类型
if (key($v) !== 0) {
$key = key($v);
$val = $v[$key];
$v = [$key, is_array($val) ? 'in' : '=', $val];
}
switch ($v[1]) {
case 'like':
// like查询 ['name|title', 'like', '%a%']
if (strpos($v[0], '|') !== false) {
$query->where(function ($query) use ($v) {
$item = explode('|', $v[0]);
foreach ($item as $vo) {
$query->orWhere($vo, $v[1], $v[2]);
}
});
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
case 'in':
// in查询 ['id', 'in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereIn($v[0], $v[2]);
break;
case 'not in':
// not in查询 ['id', 'not in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotIn($v[0], $v[2]);
break;
case 'between':
// between查询 ['created_at', 'between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereBetween($v[0], $v[2]);
break;
case 'not between':
// not between查询 ['created_at', 'not between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotBetween($v[0], $v[2]);
break;
case 'null':
// null查询 ['deleted_at', 'null']
$query->whereNull($v[0]);
break;
case "not null":
// not null查询 ['deleted_at', 'not null']
$query->whereNotNull($v[0]);
break;
case "or":
// or查询 [[['status'=>1],['status'=>2]], 'or'];
//格式:or (status=1 and status=2)
$where = $v[0];
$query->orWhere(function ($query) use ($where) {
// 递归解析查询条件
$this->formatQuery($where, $query);
});
break;
case 'xor':
// xor查询 [[['status'=>1],['status'=>2]], 'xor'];
// 格式:and (status=1 or status=2)
$where = $v[0];
$query->where(function ($query) use ($where) {
foreach ($where as $w) {
$query->orWhere(function ($query) use ($w) {
// 递归解析查询条件
$this->formatQuery([$w], $query);
});
}
});
break;
default:
// 常规查询
if (count($v) == 2) {
$query->where($v[0], '=', $v[1]);
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
}
}
});
return $query;
$map[] = ['project_id' => $this->user['project_id']];
return parent::delete($ids, $map);
}
}
... ...
... ... @@ -2,7 +2,6 @@
namespace App\Http\Logic\Bside\Product;
use App\Helper\Arr;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Attr;
use App\Models\Product\AttrValue;
... ...
<?php
namespace App\Http\Logic;
use App\Enums\Common\Code;
use App\Enums\Common\Common;
use App\Exceptions\AsideGlobalException;
use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use Illuminate\Support\Facades\Cache;
/**
* @notes: 逻辑层基类 控制器调用 统一返回 统一抛出异常
*/
class Logic
{
protected $model;
protected $is_cache = true; //是否缓存数据
/**
* @notes: 请简要描述方法功能
* @param array $data
* @return array
*/
public function success(array $data = [])
{
return $data;
}
/**
* @notes: 错误抛出
* @param string $code
* @param string $message
* @throws AsideGlobalException|BsideGlobalException
*/
public function fail(string $message = "", string $code = Code::SYSTEM_ERROR)
{
if((request()->path()[0]) == Common::B){
throw new BsideGlobalException($code, $message);
}
throw new AsideGlobalException($code, $message);
}
/**
* 列表
* @param array $map
* @param array $sort
* @param array $columns
* @param int $limit
* @return array
* @author zbj
* @date 2023/4/13
*/
public function getList(array $map = [], array $sort = ['id' => 'desc'], array $columns = ['*'], int $limit = 20)
{
// 闭包查询条件格式化
$query = $this->formatQuery($map);
// 排序(支持多重排序)
$query = $query->when($sort, function ($query, $sort) {
foreach ($sort as $k=>$v) {
$query->orderBy($k, $v);
}
});
// 数据分页设置
if ($limit) {
$result = $query->select($columns)->paginate($limit);
}else{
$result = $query->select($columns)->get();
}
return $this->success($result ? $result->toArray() : []);
}
/**
* 详情
* @param $id
* @return array
* @throws AsideGlobalException|BsideGlobalException
* @author zbj
* @date 2023/4/13
*/
public function getInfo($id)
{
$info = $this->getCacheInfo($id);
if(!$info){
$this->fail('数据不存在或者已经删除');
}
return $this->success($info->toArray());
}
/**
* @param $id
* @return mixed
* @author zbj
* @date 2023/4/15
*/
public function getCacheInfo($id){
if($this->is_cache){
$info = Cache::get($this->getInfoCacheKey($id));
if (!$info) {
$info = $this->model->find($id);
if($info){
Cache::put($this->getInfoCacheKey($id), $info);
}
}
}else{
$info = $this->model->find($id);
}
return $info;
}
/**
* 保存
* @param $param
* @return array
* @throws BsideGlobalException|AsideGlobalException
* @author zbj
* @date 2023/4/13
*/
public function save($param){
if(!empty($param['id'])){
$this->model = $this->getCacheInfo($param['id']);
if(!$this->model){
$this->fail('数据不存在或者已经删除');
}
}
foreach ($param as $name => $value){
$this->model[$name] = $value;
}
$res = $this->model->save();
if($res){
//清缓存
if($this->is_cache && !empty($param['id'])){
Cache::forget($this->getInfoCacheKey($param['id']));
}
return $this->success(['id' => $this->model->id]); //返回保存的数据id
}else{
$this->fail('保存失败');
}
}
/**
* 批量删除
* @param $ids
* @param array $map
* @return array
* @throws AsideGlobalException|BsideGlobalException
* @author zbj
* @date 2023/4/13
*/
public function delete($ids, $map = []){
$ids = array_filter(Arr::splitFilterToArray($ids), 'intval');
if(!$ids){
$this->fail('ID不能为空');
}
$map[] = ['id', 'in', $ids];
$res = $this->formatQuery($map)->delete();
if($res){
if($this->is_cache){
foreach ($ids as $id){
Cache::forget($this->getInfoCacheKey($id));
}
}
return $this->success();
}else{
$this->fail('删除失败');
}
}
/**
* @param $id
* @return string
* @author zbj
* @date 2023/4/13
*/
public function getInfoCacheKey($id){
return $this->model->getTable() . '_info_' . $id;
}
/**
* 格式化查询条件
* @param $map
* @param $query
* @return mixed
* @author zbj
* @date 2023/4/13
*/
public function formatQuery($map, $query = '')
{
$model = $query ?: $this->model;
$query = $model->where(function ($query) use ($map) {
foreach ($map as $v) {
if ($v instanceof \Closure) {
$query = $query->where($v);
continue;
}
// 判断是否是键值对类型
if (key($v) !== 0) {
$key = key($v);
$val = $v[$key];
$v = [$key, is_array($val) ? 'in' : '=', $val];
}
switch ($v[1]) {
case 'like':
// like查询 ['name|title', 'like', '%a%']
if (strpos($v[0], '|') !== false) {
$query->where(function ($query) use ($v) {
$item = explode('|', $v[0]);
foreach ($item as $vo) {
$query->orWhere($vo, $v[1], $v[2]);
}
});
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
case 'in':
// in查询 ['id', 'in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereIn($v[0], $v[2]);
break;
case 'not in':
// not in查询 ['id', 'not in', [1,2,3]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotIn($v[0], $v[2]);
break;
case 'between':
// between查询 ['created_at', 'between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereBetween($v[0], $v[2]);
break;
case 'not between':
// not between查询 ['created_at', 'not between', ['xxx', 'xxx]]
if (!is_array($v[2])) {
$v[2] = explode(',', $v[2]);
}
$query->whereNotBetween($v[0], $v[2]);
break;
case 'null':
// null查询 ['deleted_at', 'null']
$query->whereNull($v[0]);
break;
case "not null":
// not null查询 ['deleted_at', 'not null']
$query->whereNotNull($v[0]);
break;
case "or":
// or查询 [[['status'=>1],['status'=>2]], 'or'];
//格式:or (status=1 and status=2)
$where = $v[0];
$query->orWhere(function ($query) use ($where) {
// 递归解析查询条件
$this->formatQuery($where, $query);
});
break;
case 'xor':
// xor查询 [[['status'=>1],['status'=>2]], 'xor'];
// 格式:and (status=1 or status=2)
$where = $v[0];
$query->where(function ($query) use ($where) {
foreach ($where as $w) {
$query->orWhere(function ($query) use ($w) {
// 递归解析查询条件
$this->formatQuery([$w], $query);
});
}
});
break;
default:
// 常规查询
if (count($v) == 2) {
$query->where($v[0], '=', $v[1]);
} else {
$query->where($v[0], $v[1], $v[2]);
}
break;
}
}
});
return $query;
}
}
... ...
... ... @@ -2,8 +2,10 @@
namespace App\Http\Middleware\Aside;
use App\Enums\Common\Code;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
class LoginAuthMiddleware
{
... ... @@ -16,6 +18,16 @@ class LoginAuthMiddleware
*/
public function handle(Request $request, Closure $next)
{
$manage = Session::get('manage');
if (!$manage) {
if($request->ajax()){
return response(['status'=> Code::USER_ERROR,'msg'=>'当前用户未登录']);
}else{
return redirect(route('admin.login'));
}
}
return $next($request);
}
}
... ...
<?php
namespace App\Http\Requests\Aside;
use App\Enums\Common\Demo;
use BenSampo\Enum\Rules\EnumValue;
use Illuminate\Foundation\Http\FormRequest;
class DemoRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name'=>['required'],
'status'=>['required','integer',new EnumValue(Demo::class)]
];
}
}
... ... @@ -2,11 +2,13 @@
namespace App\Models;
class Manager extends Base
class Manage extends Base
{
//设置关联表名
protected $table = 'gl_manager';
//自动维护create_at创建时间 updated_at修改时间
public $timestamps = true;
protected $table = 'gl_manage';
protected $hidden = ['password'];
const STATUS_ACTIVE = 0;
const STATUS_DISABLE = 1;
}
... ...
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
/**
* 验证手机号
* Class Mobile
* @package App\Rules
* @author zbj
* @date 2023/4/19
*/
class Mobile implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$cardReg = '/^1(3|4|5|7|8)\d{9}$/';
return preg_match($cardReg, $value);
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return '手机号码格式不正确';
}
}
... ...
<form method="post" action="">
@csrf
<input type="text" name="mobile" value="15680871314">
<input type="text" name="password" value="123456">
<input type="submit">
</form>
... ...
... ... @@ -5,12 +5,23 @@
use \Illuminate\Support\Facades\Route;
use \App\Http\Controllers\Aside;
//必须登录验证的路由组
Route::middleware(['aloginauth'])->group(function ($route) {
Route::middleware(['web'])->group(function (){ //admin用渲染默认要加上web的中间件
Route::middleware(['aloginauth'])->group(function () {
Route::get('/', [Aside\IndexController::class, 'index'])->name('admin.home');
Route::get('/logout', [Aside\LoginController::class, 'logout'])->name('admin.logout');
});
//菜单
Route::prefix('menu')->group(function () {
Route::get('/', [Aside\MenuController::class, 'index'])->name('admin.menu');
Route::get('/info', [Aside\MenuController::class, 'info'])->name('admin.menu_info');
Route::post('/save', [Aside\MenuController::class, 'save'])->name('admin.menu_save');
Route::any('/delete', [Aside\MenuController::class, 'delete'])->name('admin.menu_delete');
});
});
//无需登录验证的路由组
Route::group([], function ($route) {
//demo
$route->post('/demo', [Aside\DemoController::class, 'test']);
Route::group([], function () {
Route::any('/login', [Aside\LoginController::class, 'login'])->name('admin.login');
});
});
... ...