[laravel] laravel验证请求参数
2023-02-18 15:36:27 时间
laravel 验证请求参数,有自带的规则,如果有特殊的规则,可以自己写正则验证逻辑
比如验证手机号
在控制器文件中可以直接这样编写
默认情况下,如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。 在传统 HTTP 请求下,会生成一个重定向响应, 而对于 AJAX 请求则会发送 JSON 响应,这里的JSON响应必须得传递指定的JSON header头才行
这里我修改了异常处理类,继承类覆盖了render方法,直接全部返回json数据
class QualityController extends Controller { /** * 检测参数 * @param Request $request * @return bool */ protected function checkRequestParam(Request $request):array { $validateData=$request->validate([ 'phone' => 'required|regex:/^1\d{10}$/', 'city_code' => 'required|numeric', ],[ 'required'=>":attribute 字段必填", 'numeric'=>":attribute 字段必须为数字", 'regex'=>":attribute 字段手机号格式不正确", ]); return $validateData; } /** * 同步线索质检 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function sync(Request $request){ $validateData=$this->checkRequestParam($request); return $this->responseSuccess($validateData); }
效果如这样
有需求的可以参考下面的例子自行修改
<?php namespace App\Exceptions; use App\Lib\ApiHelper\ApiCode; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Support\Arr; use Illuminate\Support\Facades\App; use Illuminate\Validation\ValidationException; use Symfony\Component\HttpKernel\Exception\HttpException; use Throwable; class Handler extends ExceptionHandler { /** * A list of the exception types that are not reported. * * @var array */ protected $dontReport = [ // ]; /** * A list of the inputs that are never flashed for validation exceptions. * * @var array */ protected $dontFlash = [ 'current_password', 'password', 'password_confirmation', ]; /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { $this->reportable(function (Throwable $e) { // }); } public function report(Throwable $e) { $message = [ 'Time:' . now(), 'Environment:' . config('app.env'), 'Project Name:' . config('app.name'), 'Url:' . request()->url(), 'Request:' . http_build_query(request()->all()), 'Exception:' . get_class($e) . '(code:' . $e->getCode(). '): ' . $e->getMessage() . ' at ' . $e->getFile() . ':' . $e->getLine(), 'Exception Trace:' . $e->getTraceAsString(), ]; logger()->error('Exception handler.', $message); try { if ($this->shouldntReport($e) && App::environment('production')) { $message = [ 'Environment:' . config('app.env'), 'Project Name:' . config('app.name'), 'Url:' . request()->url(), 'Request:' . http_build_query(request()->all()), 'Exception:' . get_class($e) . '(code:' . $e->getCode(). '): ' . $e->getMessage() . ' at ' . $e->getFile() . ':' . $e->getLine(), ]; } } catch (\Exception $exception) { logger()->error($exception->getMessage()); } parent::report($e); } public function render($request, Throwable $e) { switch ($e) { case $e instanceof ValidationException: $response = [ 'errmsg' => Arr::first($e->errors())[0] ?? '请求参数不合法', 'errcode' => ApiCode::ERROR_UNPROCESSABLE_ENTITY, 'data' => new \stdClass() ]; break; case $e instanceof HttpException: $response = [ 'errmsg' => ApiCode::getMessage(ApiCode::ERROR_HTTP_REQUEST), 'errcode' => ApiCode::ERROR_HTTP_REQUEST, 'data' => new \stdClass() ]; break; case $e instanceof ApiException: $response = [ 'errmsg' => $e->getMessage(), 'errcode' => ApiCode::ERROR_API_REQUEST, 'data' => new \stdClass() ]; break; default: $code = $e->getCode() ?: ApiCode::ERROR_SERVER_INTERNAL; $response = [ 'errmsg' => $e->getMessage() ?: ApiCode::getMessage($code), 'errcode' => $code, 'data' => new \stdClass() ]; } if (config('app.debug')) { $response['exception'] = get_class($e); $response['message'] = $e->getMessage(); $response['trace'] = $e->getTrace(); } return response()->json($response, 200); } }
相关文章
- [Docker] 使用docker inspect查看宿主机与容器的共享目录
- [日常] nginx与location规则
- [日常] nginx反代websocket
- [日常] nginx与HTTP cache
- [日常] nginx访问频率限制
- [日常] nginx与负载均衡
- [HTTP]HTTP/1.1 协议Expect: 100-continue
- [日常] 研究redis未授权访问漏洞利用过程
- [MySQL]mysql binlog回滚数据
- [日常] CentOS安装最新版redis设置远程连接密码
- [PHP]PHP中申明 declare(strict_types=1)的作用
- [日常] Apache Order Deny,Allow的用法
- [日常] 读取队列并循环发信的脚本
- [日常] 20号日常工作总结
- [日常] SinaMail项目和技术能力总结
- [日常] MySQL的预处理技术测试
- [日常] MySQL内存不足启动失败的解决方法
- [日常] 正则表达式模式修正符简单测试
- [日常] MySQL的哈希索引和原理研究测试
- [日常] crontab的秒执行和串行化和多进程实现