版权声明:本文为博主原创,未经博主同意,不得转载! https://blog.csdn.net/qq_39188306/article/details/82946125
做项目的时候,大家都知道要验证。那么今天我就说说laravel的3种验证方式:
1、手动创建验证器:该验证规则就写到控制器里面,造成控制器代码太多,个人认为不美观;
2、表单请求验证:该方法验证,相信大家常用。在此之前,我都是用表单验证,前两种验证方式在laravel文档中写的非常详细,那么今天我就给大家说说自己封装验证方法!
封装一个验证方法:
首先:在基础Controller中,添加代码如下
<?php // +---------------------------------------------------------------------- // | Description: 基础类 // +---------------------------------------------------------------------- // | Author: andy // +---------------------------------------------------------------------- namespace App\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 App\Exceptions\Code; use App\Exceptions\Common; use App\Exceptions\RequestRule; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests, Common, RequestRule; /** * 本类实例 * @var null */ private static $_instances = null; /** * 系统验证规则 参数获取 * * @param string $name 方法名 * @return array */ protected static function requestParam(string $name) { //验证方法名是否存在 if (empty($name)) { exit(self::getInstance()->responseJson(trans('validation.paramError'))); } //验证规则名 - $+方法名+Rule if (empty(self::getInstance()->{$name . 'Rule'})) { return request()->all(); } //拼接规则方法名 - $+方法名+Rule return self::getInstance()->validate(...[ request(), self::getInstance()->{$name . 'Rule'} ]); } /** * 获取此类 * * @return Controller|null */ protected static function getInstance() { if (!empty(self::$_instances)) { return self::$_instances; } return self::$_instances = new static(); } /** * 统一返回数据 * @param $code * @param string $message * @param array $data * @return \Illuminate\Http\JsonResponse */ public function responseJson($code, $message = '', $data = array()) { $result = [ 'Code' => $code, 'Message' => $message, 'data' => $data ]; return response()->json($result); } /** * 对象转数组 * * @param $object * @return mixed */ public function objectToArray($object) { //先编码成json字符串,再解码成数组 return json_decode(json_encode($object), true); } }
其次:在App\Exceptions目录下创建一个RequestRule.php的文件(这个文件的位置可以随自己喜好,然后在基础控制器里面引用该文件),并复制代码如下:
<?php // +---------------------------------------------------------------------- // | Description: 验证规则 // +---------------------------------------------------------------------- // | Author: andy // +---------------------------------------------------------------------- namespace App\Exceptions; trait RequestRule { /** * 用户列表 * 控制器中对应的 -- 方法名+Rule * @var array */ public $usersSelectRule = [ //这里筛选条件本应该为nullable,为了测试效果就写个required必填。 'client_id' => 'required|integer|min:1', ]; }
模型层:
<?php namespace App\Models\Admin\User; use App\Models\ApiModel; class Users extends ApiModel { /** * 关联到模型的数据表 * @var string */ protected $table = 'admin_users'; /** * 主键 * @var string */ protected $primaryKey = 'id'; /** * 不可操作的字段 * $fillable = []; 可操作字段 * @var array */ protected $guarded = ['id']; }
最后,控制器中调用:
<?php // +---------------------------------------------------------------------- // | Description: 后台用户类 // +---------------------------------------------------------------------- // | Author: andy // +---------------------------------------------------------------------- namespace App\Http\Controllers\Admin\User; //use Illuminate\Http\Request; use App\Exceptions\Code; use App\Http\Controllers\Controller; use App\Models\Admin\User\Users; class UsersController extends Controller { /** * __METHOD__ :魔术常量 '获取类名::方法名' * __FUNCTION__:魔术常量 '获取方法名' * @param Users $users :模型/变量 * @return \Illuminate\Http\JsonResponse */ public function usersSelect(Users $users) { //参数验证 $get = self::requestParam(__FUNCTION__); //筛选条件 $where['client_id'] = $get['client_id']; $argc = $users->getList($where); return $this->responseJson(Code::SUCCESS, '成功', $argc); //重定向到外部域名 //return redirect()->away('http://www.baidu.com'); } }
当我们不传client_id时,看看能不能查询:
当我们传client_id时,看看能不能查询:
得出的结婚是,这样写验证方式是管用的,希望能帮到大家!