简介
我正在开发一个 Laravel 包,它将根据请求中存在的 EditorJS 块生成请求规则。为了给开发人员提供最大的便利,我提供了一个扩展
EditorJSFormRequest
类的 FormRequest
类。此类为定义的块类型构建规则,然后可以用作控制器函数内的常规 FormRequest 类。
我的问题
FormRequest
类来自Illuminate\Foundation\Http\FormRequest
,不幸的是它不是一个独立的包,但需要整个laravel/framework
包。对我来说,要求整个框架似乎是一种不好的做法,我想知道是否还有其他方法。如果没有,我已经怀疑我的解决方案是否以逻辑方式编码,这意味着我也想知道是否需要更改整个代码。
背景
鉴于我开始怀疑自己是否走在正确的道路上,我想提供一些上下文来让您了解我在做什么,这是 EditorJSFormRequest 类代码:
namespace FurisonTech\LaraveditorJS;
use Illuminate\Foundation\Http\FormRequest;
abstract class EditorJSFormRequest extends FormRequest
{
protected array $editorJSFieldRuleBuilders = [];
/**
* EditorJSFormRequest constructor.
* @param array<EditorJSRequestFieldRuleBuilder> $editorJSFieldRuleBuilders
*/
public function __construct(array $editorJSFieldRuleBuilders = [])
{
parent::__construct();
$this->editorJSFieldRuleBuilders = $editorJSFieldRuleBuilders;
}
/**
* Get the validation rules that apply to the request.
* @return array
*/
final public function rules(): array
{
$rules = [];
// Build rules for each Editor.js field
foreach ($this->editorJSFieldRuleBuilders as $builder) {
$rules = array_merge($rules, $builder->buildRules($this));
}
// Merge with additional rules
return array_merge($rules, $this->additionalRules());
}
/**
* Additional validation rules.
* @return array
*/
abstract protected function additionalRules(): array;
}
现在开发人员可以创建一个扩展
EditorJSFormRequest
而不是 FormRequest
的类,例如:
class SaveArticleRequest extends EditorJSFormRequest
{
private const ALLOWED_EMBED_SERVICES = ['youtube', 'twitter', 'instagram', 'facebook', 'imgur'];
public function __construct()
{
parent::__construct([
new EditorJSRequestFieldRuleBuilder('article', [
'table' => new TableBlockRulesSupplier(200, 20, 255, 3),
'header' => new HeaderBlockRulesSupplier(255, null),
'paragraph' => new ParagraphBlockRulesSupplier(2500, null),
'image' => new ImageBlockRulesSupplier(255, 10),
'audioPlayer' => new AudioPlayerBlockRulesSupplier(12),
'embed' => new EmbedBlockRulesSupplier(self::ALLOWED_EMBED_SERVICES, 255, 5),
'list' => new ListBlockRulesSupplier(100, 500, null),
])
]);
}
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
protected function additionalRules(): array
{
return [];
}
}
是否可以为此原因需要 laravel/framework 包,或者我应该以其他方式执行此操作?
使用
orchestra/testbench
为 Laravel 开发包。使用
illuminate/support
限制 Laravel 版本。
这是软件包开发人员所需的最低知识。
"require": {
"php": "^8.1",
"illuminate/support": "^10.0||^11.0"
},
"require-dev": {
"orchestra/testbench": "^8.0||^9.0"
},
"extra": {
"laravel": {
"providers": [
"My\\Package\\MyServiceProvider"
]
}
},
FormRequest
始终存在于 Laravel 中,因此您无需担心。
不再需要支持Lumen。