Skip to content

Commit f0ae4c2

Browse files
authored
Merge pull request #45 from Lomkit/feature/attribute-validation-errors
♻️ better attribute validation errors
2 parents dab2a25 + 7946cd0 commit f0ae4c2

File tree

5 files changed

+40
-11
lines changed

5 files changed

+40
-11
lines changed

src/Http/Requests/MutateRequest.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace Lomkit\Rest\Http\Requests;
44

5-
use Illuminate\Support\Arr;
65
use Illuminate\Validation\Rule;
76
use Lomkit\Rest\Http\Resource;
7+
use Lomkit\Rest\Rules\ArrayWith;
88
use Lomkit\Rest\Rules\CustomRulable;
99

1010
class MutateRequest extends RestRequest
@@ -45,7 +45,7 @@ public function mutateRules(Resource $resource, $prefix = 'mutate.*', $loadedRel
4545
$prefix.'.attributes' => [
4646
'prohibited_if:'.$prefix.'.operation,attach',
4747
'prohibited_if:'.$prefix.'.operation,detach',
48-
'array:'.Arr::join($resource->fields($this), ','),
48+
new ArrayWith($resource->fields($this)),
4949
],
5050
$prefix.'.key' => [
5151
'required_if:'.$prefix.'.operation,update',
@@ -83,9 +83,11 @@ protected function relationRules(Resource $resource, string $prefix = '', $loade
8383

8484
$rules = [
8585
$prefix => [
86-
'array:'.Arr::join($resourceRelationsNotLoaded->map(function ($resourceRelationNotLoaded) {
87-
return $resourceRelationNotLoaded->relation;
88-
})->toArray(), ','),
86+
new ArrayWith(
87+
$resourceRelationsNotLoaded->map(function ($resourceRelationNotLoaded) {
88+
return $resourceRelationNotLoaded->relation;
89+
})->toArray()
90+
),
8991
],
9092
];
9193

src/Relations/BelongsToMany.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
namespace Lomkit\Rest\Relations;
44

55
use Illuminate\Database\Eloquent\Model;
6-
use Illuminate\Support\Arr;
76
use Lomkit\Rest\Concerns\Relations\HasPivotFields;
87
use Lomkit\Rest\Contracts\QueryBuilder;
98
use Lomkit\Rest\Contracts\RelationResource;
109
use Lomkit\Rest\Http\Resource;
1110
use Lomkit\Rest\Relations\Traits\HasMultipleResults;
11+
use Lomkit\Rest\Rules\ArrayWith;
1212

1313
class BelongsToMany extends Relation implements RelationResource
1414
{
@@ -30,7 +30,7 @@ public function rules(Resource $resource, string $prefix)
3030
[
3131
$prefix.'.*.pivot' => [
3232
'prohibited_if:'.$prefix.'.*.operation,detach',
33-
'array:'.Arr::join($this->getPivotFields(), ','),
33+
new ArrayWith($this->getPivotFields()),
3434
],
3535
]
3636
);

src/Relations/MorphToMany.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
namespace Lomkit\Rest\Relations;
44

55
use Illuminate\Database\Eloquent\Model;
6-
use Illuminate\Support\Arr;
76
use Lomkit\Rest\Concerns\Relations\HasPivotFields;
87
use Lomkit\Rest\Contracts\QueryBuilder;
98
use Lomkit\Rest\Contracts\RelationResource;
109
use Lomkit\Rest\Http\Resource;
1110
use Lomkit\Rest\Relations\Traits\HasMultipleResults;
11+
use Lomkit\Rest\Rules\ArrayWith;
1212

1313
class MorphToMany extends MorphRelation implements RelationResource
1414
{
@@ -30,7 +30,7 @@ public function rules(Resource $resource, string $prefix)
3030
[
3131
$prefix.'.*.pivot' => [
3232
'prohibited_if:'.$prefix.'.*.operation,detach',
33-
'array:'.Arr::join($this->getPivotFields(), ','),
33+
new ArrayWith($this->getPivotFields()),
3434
],
3535
]
3636
);

src/Relations/MorphedByMany.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
namespace Lomkit\Rest\Relations;
44

55
use Illuminate\Database\Eloquent\Model;
6-
use Illuminate\Support\Arr;
76
use Lomkit\Rest\Concerns\Relations\HasPivotFields;
87
use Lomkit\Rest\Contracts\QueryBuilder;
98
use Lomkit\Rest\Contracts\RelationResource;
109
use Lomkit\Rest\Http\Resource;
1110
use Lomkit\Rest\Relations\Traits\HasMultipleResults;
11+
use Lomkit\Rest\Rules\ArrayWith;
1212

1313
class MorphedByMany extends MorphRelation implements RelationResource
1414
{
@@ -30,7 +30,7 @@ public function rules(Resource $resource, string $prefix)
3030
[
3131
$prefix.'.*.pivot' => [
3232
'prohibited_if:'.$prefix.'.*.operation,detach',
33-
'array:'.Arr::join($this->getPivotFields(), ','),
33+
new ArrayWith($this->getPivotFields()),
3434
],
3535
]
3636
);

src/Rules/ArrayWith.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Lomkit\Rest\Rules;
4+
5+
use Illuminate\Contracts\Validation\ValidationRule;
6+
7+
class ArrayWith implements ValidationRule
8+
{
9+
protected array $keys;
10+
11+
public function __construct(array $keys)
12+
{
13+
$this->keys = $keys;
14+
}
15+
16+
public function validate(string $attribute, mixed $value, \Closure $fail): void
17+
{
18+
if (!is_array($value)) {
19+
$fail('The '.$attribute.' field must be an array.');
20+
}
21+
foreach (array_keys($value) as $key) {
22+
if (!in_array($key, $this->keys)) {
23+
$fail('The '.$key.' key is not valid for the '.$attribute.' field.');
24+
}
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)