Files
lsky-pro/app/Http/Requests/Admin/GroupRequest.php
2024-12-28 20:47:52 +08:00

166 lines
9.5 KiB
PHP

<?php
namespace App\Http\Requests\Admin;
use App\Http\Requests\FormRequest;
use Illuminate\Validation\Rule;
class GroupRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$requiredIfReview = function ($driver) {
return Rule::requiredIf($this->input('configs.is_enable_scan') && $this->input('configs.scan_configs.driver') === $driver);
};
$requiredIfWatermark = function ($driver) {
return Rule::requiredIf($this->input('configs.is_enable_watermark') && $this->input('configs.watermark_configs.driver') === $driver);
};
return [
'name' => 'required|between:2,30',
'is_default' => 'boolean',
'is_guest' => 'boolean',
'configs' => 'required|array',
'configs.maximum_file_size' => 'required|numeric',
'configs.concurrent_upload_num' => 'required|integer',
'configs.limit_per_minute' => 'required|integer',
'configs.limit_per_hour' => 'required|integer',
'configs.limit_per_day' => 'required|integer',
'configs.limit_per_week' => 'required|integer',
'configs.limit_per_month' => 'required|integer',
'configs.image_save_quality' => 'required|min:1|max:100',
'configs.image_save_format' => '',
'configs.path_naming_rule' => 'max:400',
'configs.file_naming_rule' => 'max:400',
'configs.accepted_file_suffixes' => 'required|array|in:jpeg,jpg,png,gif,tif,bmp,ico,psd,webp,svg',
'configs.is_enable_scan' => 'boolean',
'configs.scanned_action' => [
'exclude_if:configs.is_enable_scan,false',
'in:mark,delete',
],
'configs.scan_configs.driver' => ['exclude_if:configs.is_enable_scan,false', 'in:tencent,aliyun,nsfwjs'],
'configs.scan_configs.drivers.tencent.endpoint' => [$requiredIfReview('tencent')],
'configs.scan_configs.drivers.tencent.secret_id' => [$requiredIfReview('tencent')],
'configs.scan_configs.drivers.tencent.secret_key' => [$requiredIfReview('tencent')],
'configs.scan_configs.drivers.tencent.region' => [$requiredIfReview('tencent')],
'configs.scan_configs.drivers.tencent.biz_type' => '',
'configs.scan_configs.drivers.aliyun.access_key_id' => [$requiredIfReview('aliyun')],
'configs.scan_configs.drivers.aliyun.access_key_secret' => [$requiredIfReview('aliyun')],
'configs.scan_configs.drivers.aliyun.region_id' => [$requiredIfReview('aliyun')],
'configs.scan_configs.drivers.aliyun.biz_type' => '',
'configs.scan_configs.drivers.aliyun.scenes' => [$requiredIfReview('aliyun'), 'array'],
'configs.scan_configs.drivers.nsfwjs.api_url' => [$requiredIfReview('nsfwjs')],
'configs.scan_configs.drivers.nsfwjs.attr_name' => [$requiredIfReview('nsfwjs'), 'nullable'],
'configs.scan_configs.drivers.nsfwjs.threshold' => [$requiredIfReview('nsfwjs'), 'nullable', 'integer', 'between:1,100'],
'configs.is_enable_original_protection' => 'boolean',
'configs.image_cache_ttl' => 'nullable|numeric',
'configs.is_enable_watermark' => 'boolean',
'configs.watermark_configs.mode' => ['in:1,2'],
'configs.watermark_configs.driver' => ['exclude_if:configs.is_enable_watermark,false', 'in:font,image'],
'configs.watermark_configs.drivers.font.font' => [
$requiredIfWatermark('font'),
function ($attribute, $value, $fail) {
if (! file_exists(storage_path('app/public/'.$value))) {
$fail('字体文件不存在');
}
},
],
'configs.watermark_configs.drivers.font.position' => [$requiredIfWatermark('font')],
'configs.watermark_configs.drivers.font.text' => [$requiredIfWatermark('font')],
'configs.watermark_configs.drivers.font.color' => [$requiredIfWatermark('font')],
'configs.watermark_configs.drivers.font.size' => [$requiredIfWatermark('font'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.font.angle' => [$requiredIfWatermark('font'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.font.x' => [$requiredIfWatermark('font'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.font.y' => [$requiredIfWatermark('font'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.image.image' => [
$requiredIfWatermark('image'),
function ($attribute, $value, $fail) {
if (! file_exists(storage_path('app/public/'.$value))) {
$fail('图片文件不存在');
}
},
],
'configs.watermark_configs.drivers.image.position' => [$requiredIfWatermark('image')],
'configs.watermark_configs.drivers.image.width' => [$requiredIfWatermark('image'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.image.height' => [$requiredIfWatermark('image'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.image.opacity' => [
$requiredIfWatermark('image'), 'nullable', 'integer', 'between:0,100',
],
'configs.watermark_configs.drivers.image.rotate' => [$requiredIfWatermark('image'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.image.x' => [$requiredIfWatermark('image'), 'nullable', 'integer'],
'configs.watermark_configs.drivers.image.y' => [$requiredIfWatermark('image'), 'nullable', 'integer'],
];
}
public function attributes()
{
return [
'name' => '组名称',
'is_default' => '是否默认',
'configs' => '组配置',
'configs.maximum_file_size' => '文件最大上传大小',
'configs.concurrent_upload_num' => '并发上传数量',
'configs.limit_per_minute' => '每分钟上传限制',
'configs.limit_per_hour' => '每小时上传限制',
'configs.limit_per_day' => '每天上传限制',
'configs.limit_per_week' => '每周上传限制',
'configs.limit_per_month' => '每月上传限制',
'configs.path_naming_rule' => '路径命名规则',
'configs.file_naming_rule' => '文件命名规则',
'configs.image_save_quality' => '图片保存质量',
'configs.image_save_format' => '图片保存格式',
'configs.accepted_file_suffixes' => '允许上传的文件后缀',
'configs.is_enable_scan' => '是否启用图片审核',
'configs.scanned_action' => '图片审核动作',
'configs.scan_configs.driver' => '图片审核驱动',
'configs.scan_configs.drivers.tencent.endpoint' => 'Endpoint',
'configs.scan_configs.drivers.tencent.secret_id' => 'SecretId',
'configs.scan_configs.drivers.tencent.secret_key' => 'SecretKey',
'configs.scan_configs.drivers.tencent.region' => '地域节点',
'configs.scan_configs.drivers.tencent.biz_type' => '业务场景',
'configs.scan_configs.drivers.aliyun.access_key_id' => 'AccessKeyId',
'configs.scan_configs.drivers.aliyun.access_key_secret' => 'AccessKeySecret',
'configs.scan_configs.drivers.aliyun.region_id' => '地域节点',
'configs.scan_configs.drivers.aliyun.biz_type' => '场景名称',
'configs.scan_configs.drivers.aliyun.scenes' => '审核场景',
'configs.scan_configs.drivers.nsfwjs.api_url' => '接口地址',
'configs.scan_configs.drivers.nsfwjs.attr_name' => '表单名称',
'configs.scan_configs.drivers.nsfwjs.threshold' => '阈值',
'configs.is_enable_original_protection' => '是否启用原图保护功能',
'configs.image_cache_ttl' => '图片缓存时间',
'configs.is_enable_watermark' => '是否启用水印功能',
'configs.watermark_configs.driver' => '水印驱动',
'configs.watermark_configs.drivers.font.font' => '字体文件',
'configs.watermark_configs.drivers.font.position' => '水印位置',
'configs.watermark_configs.drivers.font.text' => '水印文字',
'configs.watermark_configs.drivers.font.color' => '字体颜色',
'configs.watermark_configs.drivers.font.size' => '水印文字大小',
'configs.watermark_configs.drivers.font.angle' => '水印旋转角度',
'configs.watermark_configs.drivers.font.x' => '水印X轴偏移量',
'configs.watermark_configs.drivers.font.y' => '水印Y轴偏移量',
'configs.watermark_configs.drivers.image.image' => '水印图片文件',
'configs.watermark_configs.drivers.image.position' => '水印位置',
'configs.watermark_configs.drivers.image.width' => '水印图片宽度',
'configs.watermark_configs.drivers.image.height' => '水印图片高度',
'configs.watermark_configs.drivers.image.opacity' => '水印透明度',
'configs.watermark_configs.drivers.image.rotate' => '水印旋转角度',
'configs.watermark_configs.drivers.image.x' => '水印X轴偏移量',
'configs.watermark_configs.drivers.image.y' => '水印Y轴偏移量',
];
}
}