123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- namespace App\Http\Requests;
- use App\Models\CustomField;
- use App\Models\Enums\CustomFieldType;
- use Illuminate\Validation\Rule;
- trait CustomFieldRuleHelper
- {
- protected function customFieldRuleByGroup(string $group, array $keys = []): array
- {
- $customFields = CustomField::query()
- ->where("group", $group)
- ->when(count($keys) > 0, function ($query) use ($keys) {
- return $query->whereIn("key", $keys);
- })
- ->get();
- $rules = [];
- foreach ($customFields as $customField) {
- $rule = $this->customFieldToRule($customField);
- if (! $rule) {
- continue;
- }
- $rules[$customField->key]= $rule;
- }
- return $rules;
- }
- protected function customFieldToRule(CustomField $customField): array
- {
- $rule = [];
- if ($customField->required == 1) {
- $rule[] = "required";
- }
- $typeRule = match (CustomFieldType::tryFrom($customField->type)) {
- CustomFieldType::TEXT => "string",
- CustomFieldType::TEXTAREA => "string",
- CustomFieldType::SELECT => $customField->options ? Rule::in(array_column($customField->options, "value")) : "",
- CustomFieldType::NUMBER => "numeric",
- default => ""
- };
- if ($typeRule) {
- $rule[] = $typeRule;
- }
- return $rule;
- }
- }
|