Laravel 包开发 - 需要扩展 FormRequest 类,但不想需要整个 Laravel 框架包

问题描述 投票:0回答:1

简介

我正在开发一个 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 包,或者我应该以其他方式执行此操作?

php laravel editorjs
1个回答
0
投票

使用

orchestra/testbench
为 Laravel 开发包。
https://github.com/orchestral/testbench

使用

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。

© www.soinside.com 2019 - 2024. All rights reserved.