Add validation for update
This commit is contained in:
parent
b109d40ebb
commit
6262ccdd28
|
@ -2,51 +2,16 @@
|
||||||
|
|
||||||
namespace App\Form\Actions;
|
namespace App\Form\Actions;
|
||||||
|
|
||||||
use App\Form\Fields\Field;
|
|
||||||
use App\Form\Models\Formtemplate;
|
use App\Form\Models\Formtemplate;
|
||||||
use App\Lib\Events\Succeeded;
|
use App\Lib\Events\Succeeded;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Validation\Rule;
|
|
||||||
use Illuminate\Validation\Validator;
|
|
||||||
use Lorisleiva\Actions\ActionRequest;
|
use Lorisleiva\Actions\ActionRequest;
|
||||||
use Lorisleiva\Actions\Concerns\AsAction;
|
use Lorisleiva\Actions\Concerns\AsAction;
|
||||||
|
|
||||||
class FormtemplateStoreAction
|
class FormtemplateStoreAction
|
||||||
{
|
{
|
||||||
use AsAction;
|
use AsAction;
|
||||||
|
use HasValidation;
|
||||||
/**
|
|
||||||
* @return array<string, mixed>
|
|
||||||
*/
|
|
||||||
public function rules(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'name' => 'required|string|max:255',
|
|
||||||
'config' => 'array',
|
|
||||||
'config.sections.*.name' => 'required',
|
|
||||||
'config.sections.*.fields' => 'array',
|
|
||||||
'config.sections.*.fields.*.name' => 'required|string',
|
|
||||||
'config.sections.*.fields.*.type' => ['required', 'string', Rule::in(array_column(Field::asMeta(), 'id'))],
|
|
||||||
'config.sections.*.fields.*.key' => ['required', 'string', 'regex:/^[a-zA-Z_]*$/'],
|
|
||||||
'config.sections.*.fields.*.columns' => 'required|array',
|
|
||||||
'config.sections.*.fields.*.columns.mobile' => 'required|numeric|gt:0|lte:2',
|
|
||||||
'config.sections.*.fields.*.columns.tablet' => 'required|numeric|gt:0|lte:4',
|
|
||||||
'config.sections.*.fields.*.columns.desktop' => 'required|numeric|gt:0|lte:6',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return array<string, mixed>
|
|
||||||
*/
|
|
||||||
public function getValidationAttributes(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'config.sections.*.name' => 'Sektionsname',
|
|
||||||
'config.sections.*.fields.*.name' => 'Feldname',
|
|
||||||
'config.sections.*.fields.*.type' => 'Feldtyp',
|
|
||||||
'config.sections.*.fields.*.key' => 'Feldkey',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array<string, mixed> $attributes
|
* @param array<string, mixed> $attributes
|
||||||
|
@ -63,26 +28,4 @@ class FormtemplateStoreAction
|
||||||
Succeeded::message('Vorlage gespeichert.')->dispatch();
|
Succeeded::message('Vorlage gespeichert.')->dispatch();
|
||||||
return response()->json([]);
|
return response()->json([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function withValidator(Validator $validator, ActionRequest $request): void
|
|
||||||
{
|
|
||||||
if (!$validator->passes()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($request->input('config.sections') as $sindex => $section) {
|
|
||||||
foreach (data_get($section, 'fields') as $findex => $field) {
|
|
||||||
$fieldClass = Field::classFromType($field['type']);
|
|
||||||
if (!$fieldClass) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
foreach ($fieldClass::metaRules() as $fieldName => $rules) {
|
|
||||||
$validator->addRules(["config.sections.{$sindex}.fields.{$findex}.{$fieldName}" => $rules]);
|
|
||||||
}
|
|
||||||
foreach ($fieldClass::metaAttributes() as $fieldName => $attribute) {
|
|
||||||
$validator->addCustomAttributes(["config.sections.{$sindex}.fields.{$findex}.{$fieldName}" => $attribute]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ use Lorisleiva\Actions\Concerns\AsAction;
|
||||||
class FormtemplateUpdateAction
|
class FormtemplateUpdateAction
|
||||||
{
|
{
|
||||||
use AsAction;
|
use AsAction;
|
||||||
|
use HasValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array<string, mixed>
|
* @return array<string, mixed>
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Form\Actions;
|
||||||
|
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
use App\Form\Fields\Field;
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
|
use Lorisleiva\Actions\ActionRequest;
|
||||||
|
|
||||||
|
trait HasValidation
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'config' => 'array',
|
||||||
|
'config.sections.*.name' => 'required',
|
||||||
|
'config.sections.*.fields' => 'array',
|
||||||
|
'config.sections.*.fields.*.name' => 'required|string',
|
||||||
|
'config.sections.*.fields.*.type' => ['required', 'string', Rule::in(array_column(Field::asMeta(), 'id'))],
|
||||||
|
'config.sections.*.fields.*.key' => ['required', 'string', 'regex:/^[a-zA-Z_]*$/'],
|
||||||
|
'config.sections.*.fields.*.columns' => 'required|array',
|
||||||
|
'config.sections.*.fields.*.columns.mobile' => 'required|numeric|gt:0|lte:2',
|
||||||
|
'config.sections.*.fields.*.columns.tablet' => 'required|numeric|gt:0|lte:4',
|
||||||
|
'config.sections.*.fields.*.columns.desktop' => 'required|numeric|gt:0|lte:6',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function getValidationAttributes(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'config.sections.*.name' => 'Sektionsname',
|
||||||
|
'config.sections.*.fields.*.name' => 'Feldname',
|
||||||
|
'config.sections.*.fields.*.type' => 'Feldtyp',
|
||||||
|
'config.sections.*.fields.*.key' => 'Feldkey',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function withValidator(Validator $validator, ActionRequest $request): void
|
||||||
|
{
|
||||||
|
if (!$validator->passes()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($request->input('config.sections') as $sindex => $section) {
|
||||||
|
foreach (data_get($section, 'fields') as $findex => $field) {
|
||||||
|
$fieldClass = Field::classFromType($field['type']);
|
||||||
|
if (!$fieldClass) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
foreach ($fieldClass::metaRules() as $fieldName => $rules) {
|
||||||
|
$validator->addRules(["config.sections.{$sindex}.fields.{$findex}.{$fieldName}" => $rules]);
|
||||||
|
}
|
||||||
|
foreach ($fieldClass::metaAttributes() as $fieldName => $attribute) {
|
||||||
|
$validator->addCustomAttributes(["config.sections.{$sindex}.fields.{$findex}.{$fieldName}" => $attribute]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ class RadioField extends Field
|
||||||
public static function meta(): array
|
public static function meta(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'string'], 'label' => 'Optionen'],
|
['key' => 'options', 'default' => [], 'rules' => ['options' => 'present|array', 'options.*' => 'required|string'], 'label' => 'Optionen'],
|
||||||
['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
|
['key' => 'required', 'default' => false, 'rules' => ['required' => 'present|boolean'], 'label' => 'Erforderlich'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue