wesmiler 5 yıl önce
ebeveyn
işleme
58add3238e

+ 3 - 1
.env

@@ -17,4 +17,6 @@ REDIS_PORT=6379
 REDIS_DB=3
 
 # JWT Secret
-JWT_SECRET=hcbet_jwt
+JWT_SECRET=hcbet_jwt
+# token过期时间,单位为秒
+JWT_TTL=86400

+ 2 - 0
app/Constants/ErrorCode.php

@@ -23,4 +23,6 @@ class ErrorCode extends AbstractConstants
      * @Message("Server Error!")
      */
     const SERVER_ERROR = 500;
+    const API_ERROR = 'err';
+    const API_SUCCESS = 'err';
 }

+ 47 - 0
app/Controller/Request/UploadRequest.php

@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Request;
+/**
+ *
+ */
+use App\Constants\ErrorCode;
+use App\Exception\ApiException;
+use Hyperf\Contract\ValidatorInterface;
+use Hyperf\Validation\Request\FormRequest;
+class UploadRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     */
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     */
+    public function rules(): array
+    {
+        return [
+            'type' => 'nullable|string',
+            'file' => 'required|file',
+        ];
+    }
+
+    public function messages(): array
+    {
+        return [
+            'required' => ':attribute 必填',
+            'file' => ':attribute 必须上传',
+        ];
+    }
+
+    // 这里我是希望走到我自己定义的 异常处理,你如果没有自定义,去掉这个函数的重写即可。
+    protected function failedValidation(ValidatorInterface $validator)
+    {
+        throw new ApiException(ErrorCode::SERVER_ERROR, $validator->errors()->first());
+    }
+}

+ 24 - 0
app/Exception/ApiException.php

@@ -0,0 +1,24 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * API exception
+ * @author wesmiler
+ */
+namespace App\Exception;
+
+use App\Constants\ErrorCode;
+use Hyperf\Server\Exception\ServerException;
+use Throwable;
+
+class ApiException extends ServerException
+{
+    public function __construct(int $code = 0, string $message = null, Throwable $previous = null)
+    {
+        if (is_null($message)) {
+            $message = ErrorCode::getMessage($code);
+        }
+
+        parent::__construct($message, $code, $previous);
+    }
+}

+ 1 - 0
config/autoload/middlewares.php

@@ -11,5 +11,6 @@ declare(strict_types=1);
  */
 return [
     'http' => [
+        Phper666\JwtAuth\Middleware\JwtAuthMiddleware::class
     ],
 ];

+ 13 - 0
config/autoload/translation.php

@@ -0,0 +1,13 @@
+<?php
+/**
+ * LANG
+ * @author wesmiler
+ */
+return [
+    // 默认语言
+    'locale' => 'zh_CN',
+    // 回退语言,当默认语言的语言文本没有提供时,就会使用回退语言的对应语言文本
+    'fallback_locale' => 'en',
+    // 语言文件存放的文件夹
+    'path' => BASE_PATH . '/storage/languages',
+];

+ 0 - 0
storage/languages/en/api.php


+ 149 - 0
storage/languages/en/validation.php

@@ -0,0 +1,149 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'The :attribute must be accepted.',
+    'active_url' => 'The :attribute is not a valid URL.',
+    'after' => 'The :attribute must be a date after :date.',
+    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+    'alpha' => 'The :attribute may only contain letters.',
+    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
+    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'array' => 'The :attribute must be an array.',
+    'before' => 'The :attribute must be a date before :date.',
+    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_equals' => 'The :attribute must be a date equal to :date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'dimensions' => 'The :attribute has invalid image dimensions.',
+    'distinct' => 'The :attribute field has a duplicate value.',
+    'email' => 'The :attribute must be a valid email address.',
+    'exists' => 'The selected :attribute is invalid.',
+    'file' => 'The :attribute must be a file.',
+    'filled' => 'The :attribute field must have a value.',
+    'gt' => [
+        'numeric' => 'The :attribute must be greater than :value.',
+        'file' => 'The :attribute must be greater than :value kilobytes.',
+        'string' => 'The :attribute must be greater than :value characters.',
+        'array' => 'The :attribute must have more than :value items.',
+    ],
+    'gte' => [
+        'numeric' => 'The :attribute must be greater than or equal :value.',
+        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
+        'string' => 'The :attribute must be greater than or equal :value characters.',
+        'array' => 'The :attribute must have :value items or more.',
+    ],
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'in_array' => 'The :attribute field does not exist in :other.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'ipv4' => 'The :attribute must be a valid IPv4 address.',
+    'ipv6' => 'The :attribute must be a valid IPv6 address.',
+    'json' => 'The :attribute must be a valid JSON string.',
+    'lt' => [
+        'numeric' => 'The :attribute must be less than :value.',
+        'file' => 'The :attribute must be less than :value kilobytes.',
+        'string' => 'The :attribute must be less than :value characters.',
+        'array' => 'The :attribute must have less than :value items.',
+    ],
+    'lte' => [
+        'numeric' => 'The :attribute must be less than or equal :value.',
+        'file' => 'The :attribute must be less than or equal :value kilobytes.',
+        'string' => 'The :attribute must be less than or equal :value characters.',
+        'array' => 'The :attribute must not have more than :value items.',
+    ],
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'mimetypes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'not_in' => 'The selected :attribute is invalid.',
+    'not_regex' => 'The :attribute format is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'present' => 'The :attribute field must be present.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_unless' => 'The :attribute field is required unless :other is in :values.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values are present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'starts_with' => 'The :attribute must start with one of the following: :values',
+    'string' => 'The :attribute must be a string.',
+    'timezone' => 'The :attribute must be a valid zone.',
+    'unique' => 'The :attribute has already been taken.',
+    'uploaded' => 'The :attribute failed to upload.',
+    'url' => 'The :attribute format is invalid.',
+    'uuid' => 'The :attribute must be a valid UUID.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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 our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 77 - 0
storage/languages/zh_CN/api.php

@@ -0,0 +1,77 @@
+<?php
+
+return [
+    /* 公共 */
+    '1001'=> 'ok',
+    '1002'=> 'err',
+    // '1001'=> 'success',
+    // '1002'=> 'error',
+    '1003'=> 'exception',
+    '1004'=> '路由不存在',
+    '1005'=> '授权登录失败,请刷新重试',
+    '1006'=> '服务器错误',
+    '1007'=> '验证场景不存在...',
+    '1008'=> '获取数据成功',
+    '1009'=> '获取数据失败',
+    '1010'=> '缺少重要参数',
+    '1011'=> '授权成功',
+    '1012'=> '参数失效,请返回重试...',
+    '1013'=> '非法访问',
+    '1014'=> '服务器错误...',
+    '1016'=> '操作成功',
+    '1017'=> '操作失败',
+    '1018'=> '保存成功',
+    '1019'=> '保存失败',
+    '1020'=> '发送成功',
+    '1021'=> '发送失败',
+    '1022'=> '上传成功',
+    '1023'=> '上传失败',
+    '1024'=> '任务非法请求',
+    '1025'=> '任务请求失败',
+    '1026'=> '任务请求成功',
+    '1027'=> '账号注册失败',
+    '1028'=> '账号注册成功',
+    '1029'=> '推荐内容不能存在重复数据或号码',
+    '1030'=> '用户名已被使用',
+    '1031'=> '授权密钥错误',
+    '1032'=> '账号登录成功',
+    '1033'=> '账号登录失败',
+    '1034'=> '登录密码错误',
+    '1035'=> '登录账号不存在',
+    '1036'=> '登录账号暂不可用,联系管理或客服',
+    '1037'=> '数据不存在',
+    '1038'=> '参数错误',
+    '1039'=> '删除数据成功',
+    '1040'=> '删除数据失败',
+    '1041'=> '更新数据成功',
+    '1042'=> '更新数据失败',
+    '1043'=> ':name 站点未开放访问权限,请联系管理员开放',
+    '1044'=> ':name 站点未配置站点信息,请先配置站点',
+    '1045'=> ':name 站点使用期限已到期,请联系管理员续费',
+    '1046'=> '清除缓存成功',
+
+    /* 彩种 */
+    '2001'=> '彩种信息不存在',
+    '2002'=> '新增彩种成功',
+    '2003'=> '新增彩种失败',
+    '2004'=> '保存彩种成功',
+    '2005'=> '保存彩种失败',
+    '2006'=> '删除彩种成功',
+    '2007'=> '删除彩种失败',
+
+
+    /* 导航 */
+    '3001'=> '当前导航存在子导航不可更改上级导航',
+    '3002'=> '当前导航存在子导航不可删除,请先删除子导航',
+
+    /* 栏目 */
+    '4001'=> '栏目信息不存在',
+    '4002'=> '新增栏目成功',
+    '4003'=> '新增栏目失败',
+    '4004'=> '保存栏目成功',
+    '4005'=> '保存栏目失败',
+    '4006'=> '删除栏目成功',
+    '4007'=> '删除栏目失败',
+
+
+];

+ 149 - 0
storage/languages/zh_CN/validation.php

@@ -0,0 +1,149 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'The :attribute must be accepted.',
+    'active_url' => 'The :attribute is not a valid URL.',
+    'after' => 'The :attribute must be a date after :date.',
+    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+    'alpha' => 'The :attribute may only contain letters.',
+    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
+    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'array' => 'The :attribute must be an array.',
+    'before' => 'The :attribute must be a date before :date.',
+    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_equals' => 'The :attribute must be a date equal to :date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'dimensions' => 'The :attribute has invalid image dimensions.',
+    'distinct' => 'The :attribute field has a duplicate value.',
+    'email' => 'The :attribute must be a valid email address.',
+    'exists' => 'The selected :attribute is invalid.',
+    'file' => 'The :attribute must be a file.',
+    'filled' => 'The :attribute field must have a value.',
+    'gt' => [
+        'numeric' => 'The :attribute must be greater than :value.',
+        'file' => 'The :attribute must be greater than :value kilobytes.',
+        'string' => 'The :attribute must be greater than :value characters.',
+        'array' => 'The :attribute must have more than :value items.',
+    ],
+    'gte' => [
+        'numeric' => 'The :attribute must be greater than or equal :value.',
+        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
+        'string' => 'The :attribute must be greater than or equal :value characters.',
+        'array' => 'The :attribute must have :value items or more.',
+    ],
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'in_array' => 'The :attribute field does not exist in :other.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'ipv4' => 'The :attribute must be a valid IPv4 address.',
+    'ipv6' => 'The :attribute must be a valid IPv6 address.',
+    'json' => 'The :attribute must be a valid JSON string.',
+    'lt' => [
+        'numeric' => 'The :attribute must be less than :value.',
+        'file' => 'The :attribute must be less than :value kilobytes.',
+        'string' => 'The :attribute must be less than :value characters.',
+        'array' => 'The :attribute must have less than :value items.',
+    ],
+    'lte' => [
+        'numeric' => 'The :attribute must be less than or equal :value.',
+        'file' => 'The :attribute must be less than or equal :value kilobytes.',
+        'string' => 'The :attribute must be less than or equal :value characters.',
+        'array' => 'The :attribute must not have more than :value items.',
+    ],
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'mimetypes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'not_in' => 'The selected :attribute is invalid.',
+    'not_regex' => 'The :attribute format is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'present' => 'The :attribute field must be present.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_unless' => 'The :attribute field is required unless :other is in :values.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values are present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'starts_with' => 'The :attribute must start with one of the following: :values',
+    'string' => 'The :attribute must be a string.',
+    'timezone' => 'The :attribute must be a valid zone.',
+    'unique' => 'The :attribute has already been taken.',
+    'uploaded' => 'The :attribute failed to upload.',
+    'url' => 'The :attribute format is invalid.',
+    'uuid' => 'The :attribute must be a valid UUID.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | 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 our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];