Разработка пакета Laravel. Необходимо расширить класс FormRequest, но не требуется весь пакет инфраструктуры laravel.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Разработка пакета Laravel. Необходимо расширить класс FormRequest, но не требуется весь пакет инфраструктуры laravel.

Сообщение Anonymous »

Введение
Я разрабатываю пакет Laravel, который будет генерировать правила запроса на основе блоков EditorJS, присутствующих в запросе. Чтобы обеспечить максимальное удобство для разработчиков, я предлагаю класс EditorJSFormRequest, который расширяет класс FormRequest. Этот класс создает правила для определенных типов блоков, а затем может использоваться как обычный класс FormRequest внутри функции контроллера.
Моя проблемаКласс FormRequest взят из Illuminate\Foundation\Http\FormRequest, который, к сожалению, не является отдельным пакетом, но требует всего пакета laravel/framework. На мой взгляд, требовать всю структуру целиком — это плохая практика, и мне интересно, есть ли другой способ. Если нет, то я уже сомневаюсь, что мое решение закодировано логически, а это означает, что я также задаюсь вопросом, нужно ли мне менять весь код.
Контекст< /p>
Учитывая, что я начинаю сомневаться, на правильном ли я пути, я хочу предложить некоторый контекст, чтобы дать вам представление о том, что я делаю, это код класса EditorJSFormRequest:
p>

Код: Выделить всё

namespace FurisonTech\LaraveditorJS;

use Illuminate\Foundation\Http\FormRequest;

abstract class EditorJSFormRequest extends FormRequest
{
protected array $editorJSFieldRuleBuilders = [];

/**
* EditorJSFormRequest constructor.
* @param array $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 или мне следует сделать это по-другому?


Подробнее здесь: https://stackoverflow.com/questions/790 ... ut-dont-wa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»