From cfbd28918d0449b5fd5d6108508202f2e89821ee Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Sat, 29 Apr 2023 17:06:34 +0800 Subject: [PATCH] Exceptions/Handler --- app/Exceptions/Handler.php | 13 +- .../Controllers/Api/AdminNoticeController.php | 7 +- .../Controllers/Api/ArticleController.php | 7 +- app/Http/Controllers/Api/BannerController.php | 3 + lang/zh_CN/validation.php | 177 ++++++++++++++++++ 5 files changed, 193 insertions(+), 14 deletions(-) create mode 100644 lang/zh_CN/validation.php diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 82a37e4..7c3136f 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -4,6 +4,7 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Throwable; +use Illuminate\Http\Request; class Handler extends ExceptionHandler { @@ -43,8 +44,16 @@ class Handler extends ExceptionHandler */ public function register() { - $this->reportable(function (Throwable $e) { - // + $this->renderable(function (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e, Request $request) { + if ($request->acceptsJson()) { + return response()->json(['status' => 404, 'msg' => '资源不存在', 'data' => null], 200); + } + }); + $this->renderable(function (\Illuminate\Validation\ValidationException $e, Request $request) { + if ($request->acceptsJson()) { + $errors = $e->validator->errors(); + return response()->json(['status' => 422, 'msg' => $errors->first(), 'data' => null, 'errors' => $errors], 200); + } }); } } diff --git a/app/Http/Controllers/Api/AdminNoticeController.php b/app/Http/Controllers/Api/AdminNoticeController.php index 691a668..e476c99 100644 --- a/app/Http/Controllers/Api/AdminNoticeController.php +++ b/app/Http/Controllers/Api/AdminNoticeController.php @@ -20,12 +20,7 @@ class AdminNoticeController extends Controller public function show($id) { - $info = AdminNotice::enable()->find($id); - - if (!$info) { - return $this->error('记录不存在'); - } - + $info = AdminNotice::enable()->findOrFail($id); return $this->json(AdminNoticeResource::make($info)); } } diff --git a/app/Http/Controllers/Api/ArticleController.php b/app/Http/Controllers/Api/ArticleController.php index 10049ed..e8cae18 100644 --- a/app/Http/Controllers/Api/ArticleController.php +++ b/app/Http/Controllers/Api/ArticleController.php @@ -37,12 +37,7 @@ class ArticleController extends Controller public function show($id) { - $info = Article::enable()->find($id); - - if (!$info) { - return $this->error('记录不存在'); - } - + $info = Article::enable()->findOrFail($id); return $this->json(ArticleResource::make($info)); } } diff --git a/app/Http/Controllers/Api/BannerController.php b/app/Http/Controllers/Api/BannerController.php index 85eb452..5f32a6e 100644 --- a/app/Http/Controllers/Api/BannerController.php +++ b/app/Http/Controllers/Api/BannerController.php @@ -11,6 +11,9 @@ class BannerController extends Controller { public function index(Request $request) { + $request->validate([ + 'key' => 'required', + ]); $query = Banner::with(['place'])->filter($request->all())->sort()->enable(); $list = $query->get(); diff --git a/lang/zh_CN/validation.php b/lang/zh_CN/validation.php new file mode 100644 index 0000000..44888f6 --- /dev/null +++ b/lang/zh_CN/validation.php @@ -0,0 +1,177 @@ + ':attribute 必须接受。', + 'active_url' => ':attribute 不是一个有效的网址。', + 'after' => ':attribute 必须要晚于 :date。', + 'after_or_equal' => ':attribute 必须要等于 :date 或更晚。', + 'alpha' => ':attribute 只能由字母组成。', + 'alpha_dash' => ':attribute 只能由字母、数字和斜杠组成。', + 'alpha_num' => ':attribute 只能由字母和数字组成。', + 'array' => ':attribute 必须是一个数组。', + 'before' => ':attribute 必须要早于 :date。', + 'before_or_equal' => ':attribute 必须要等于 :date 或更早。', + 'between' => [ + 'numeric' => ':attribute 必须介于 :min - :max 之间。', + 'file' => ':attribute 必须介于 :min - :max KB 之间。', + 'string' => ':attribute 必须介于 :min - :max 个字符之间。', + 'array' => ':attribute 必须只有 :min - :max 个单元。', + ], + 'boolean' => ':attribute 必须为布尔值。', + 'confirmed' => ':attribute 两次输入不一致。', + 'date' => ':attribute 不是一个有效的日期。', + 'date_format' => ':attribute 的格式必须为 :format。', + 'different' => ':attribute 和 :other 必须不同。', + 'digits' => ':attribute 必须是 :digits 位的数字。', + 'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。', + 'dimensions' => ':attribute 图片尺寸不正确。', + 'distinct' => ':attribute 已经存在。', + 'email' => ':attribute 不是一个合法的邮箱。', + 'exists' => ':attribute 不存在。', + 'file' => ':attribute 必须是文件。', + 'filled' => ':attribute 不能为空。', + 'gt' => [ + 'numeric' => ':attribute 必须大于 :value。', + 'file' => ':attribute 必须大于 :value KB。', + 'string' => ':attribute 必须多于 :value 个字符。', + 'array' => ':attribute 必须多于 :value 个元素。', + ], + 'gte' => [ + 'numeric' => ':attribute 必须大于或等于 :value。', + 'file' => ':attribute 必须大于或等于 :value KB。', + 'string' => ':attribute 必须多于或等于 :value 个字符。', + 'array' => ':attribute 必须多于或等于 :value 个元素。', + ], + 'image' => ':attribute 必须是图片。', + 'in' => '已选的属性 :attribute 非法。', + 'in_array' => ':attribute 没有在 :other 中。', + 'integer' => ':attribute 必须是整数。', + 'ip' => ':attribute 必须是有效的 IP 地址。', + 'ipv4' => ':attribute 必须是有效的 IPv4 地址。', + 'ipv6' => ':attribute 必须是有效的 IPv6 地址。', + 'json' => ':attribute 必须是正确的 JSON 格式。', + 'lt' => [ + 'numeric' => ':attribute 必须小于 :value。', + 'file' => ':attribute 必须小于 :value KB。', + 'string' => ':attribute 必须少于 :value 个字符。', + 'array' => ':attribute 必须少于 :value 个元素。', + ], + 'lte' => [ + 'numeric' => ':attribute 必须小于或等于 :value。', + 'file' => ':attribute 必须小于或等于 :value KB。', + 'string' => ':attribute 必须少于或等于 :value 个字符。', + 'array' => ':attribute 必须少于或等于 :value 个元素。', + ], + 'max' => [ + 'numeric' => ':attribute 不能大于 :max。', + 'file' => ':attribute 不能大于 :max KB。', + 'string' => ':attribute 不能大于 :max 个字符。', + 'array' => ':attribute 最多只有 :max 个单元。', + ], + 'mimes' => ':attribute 必须是一个 :values 类型的文件。', + 'mimetypes' => ':attribute 必须是一个 :values 类型的文件。', + 'min' => [ + 'numeric' => ':attribute 必须大于等于 :min。', + 'file' => ':attribute 大小不能小于 :min KB。', + 'string' => ':attribute 至少为 :min 个字符。', + 'array' => ':attribute 至少有 :min 个单元。', + ], + 'not_in' => '已选的属性 :attribute 非法。', + 'not_regex' => ':attribute 的格式错误。', + 'numeric' => ':attribute 必须是一个数字。', + 'present' => ':attribute 必须存在。', + 'regex' => ':attribute 格式不正确。', + 'required' => ':attribute 不能为空。', + 'phone' => '手机号码格式错误', + 'phone_code' => '验证码不正确或已过期', + 'required_if' => '当 :other 为 :value 时 :attribute 不能为空。', + 'required_unless' => '当 :other 不为 :value 时 :attribute 不能为空。', + 'required_with' => '当 :values 存在时 :attribute 不能为空。', + 'required_with_all' => '当 :values 存在时 :attribute 不能为空。', + 'required_without' => '当 :values 不存在时 :attribute 不能为空。', + 'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。', + 'same' => ':attribute 和 :other 必须相同。', + 'size' => [ + 'numeric' => ':attribute 大小必须为 :size。', + 'file' => ':attribute 大小必须为 :size KB。', + 'string' => ':attribute 必须是 :size 个字符。', + 'array' => ':attribute 必须为 :size 个单元。', + ], + 'string' => ':attribute 必须是一个字符串。', + 'timezone' => ':attribute 必须是一个合法的时区值。', + 'unique' => ':attribute 已经存在。', + 'uploaded' => ':attribute 上传失败。', + 'url' => ':attribute 格式不正确。', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention 'attribute.rule' to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of 'email'. This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [ + 'name' => '名称', + 'username' => '登录名', + 'email' => '邮箱', + 'first_name' => '名', + 'last_name' => '姓', + 'password' => '密码', + 'password_confirmation' => '确认密码', + 'city' => '城市', + 'country' => '国家', + 'address' => '地址', + 'phone' => '电话', + 'mobile' => '手机', + 'age' => '年龄', + 'sex' => '性别', + 'gender' => '性别', + 'day' => '天', + 'month' => '月', + 'year' => '年', + 'hour' => '时', + 'minute' => '分', + 'second' => '秒', + 'title' => '标题', + 'content' => '内容', + 'description' => '描述', + 'excerpt' => '摘要', + 'date' => '日期', + 'time' => '时间', + 'available' => '可用的', + 'size' => '大小', + 'phone' => '手机号码', + ], +];