laravel5 3种验证方式

版权声明:本文为博主原创,未经博主同意,不得转载! 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时,看看能不能查询:

得出的结婚是,这样写验证方式是管用的,希望能帮到大家!

猜你喜欢

转载自blog.csdn.net/qq_39188306/article/details/82946125
今日推荐