Skip to content

Commit

Permalink
Merge pull request #438 from spatie/v4-use-validated-data
Browse files Browse the repository at this point in the history
Only use validated data
  • Loading branch information
rubenvanassche authored May 5, 2023
2 parents 5ea9734 + f458318 commit afe0ac7
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/Concerns/ValidateableData.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Spatie\LaravelData\Concerns;

use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Illuminate\Validation\Validator;
use Spatie\LaravelData\Resolvers\DataValidationRulesResolver;
Expand Down Expand Up @@ -49,7 +50,9 @@ public static function validate(Arrayable|array $payload): Arrayable|array

public static function validateAndCreate(Arrayable|array $payload): static
{
static::validate($payload);
if (! $payload instanceof Request) {
$payload = static::validate($payload);
}

return static::from($payload);
}
Expand Down
4 changes: 2 additions & 2 deletions src/DataPipes/ValidatePropertiesDataPipe.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ public function handle(mixed $payload, DataClass $class, Collection $properties)
return $properties;
}

($class->name)::validate($properties);
$validated = ($class->name)::validate($properties);

return $properties;
return $properties->only(array_keys($validated));
}
}
35 changes: 35 additions & 0 deletions tests/ValidationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2169,3 +2169,38 @@ public static function rules(): array
expect($validatorToPass->passes())->toBeTrue()
->and($validatorToFail->passes())->toBeFalse();
});

it('can exclude data based upon validation rules', function () {
$dataObject = new class ('', '') extends Data {
public function __construct(
public readonly ?string $email,
public readonly Optional|string $email_md5,
) {
}

public static function rules()
{
return [
'email' => ['email'],
'email_md5' => ['exclude_with:email'],
];
}
};

expect($dataObject::validateAndCreate([
"email" => '[email protected]',
"email_md5" => md5('[email protected]'),
]))
->email->toBe('[email protected]')
->email_md5->toBeInstanceOf(Optional::class);

// Requests use the pipeline flow
$request = \request()->merge([
"email" => '[email protected]',
"email_md5" => md5('[email protected]'),
]);

expect($dataObject::from($request))
->email->toBe('[email protected]')
->email_md5->toBeInstanceOf(Optional::class);
});

0 comments on commit afe0ac7

Please sign in to comment.