diff --git a/docs/configure_your_operations.md b/docs/configure_your_operations.md index 4e373d2c1..2b2dfcf2a 100644 --- a/docs/configure_your_operations.md +++ b/docs/configure_your_operations.md @@ -511,4 +511,4 @@ These vars will be available on any operations for this resource. **[Go back to the documentation's index](index.md)** -**[> Next chapter: Redirect](redirect.md)** +**[> Next chapter: Validation](validation.md)** diff --git a/docs/index.md b/docs/index.md index f63f55258..1c615e84a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,6 +22,7 @@ So far we support: * [Create a new resource](create_new_resource.md) * [Configure your resource](configure_your_resource.md) * [Configure your operations](configure_your_operations.md) +* [Validation](validation.md) * [Redirect](redirect.md) * [Resource Factories](resource_factories.md) * [Providers](providers.md) diff --git a/docs/validation.md b/docs/validation.md new file mode 100644 index 000000000..86cd0d7ad --- /dev/null +++ b/docs/validation.md @@ -0,0 +1,92 @@ +# Validation + + +* [on HTML request](#on-html-request) +* [on API request](#on-api-request) +* [Disable validation](#disable-validation) + + +It uses `symfony/validator` to validate your data. + +## on HTML request + +```php +namespace App\Entity; + +use App\Form\Type\BookType; +use Sylius\Resource\Model\ResourceInterface; +use Sylius\Resource\Metadata\AsResource; +use Sylius\Resource\Metadata\Create; +use Symfony\Component\Validator\Constraints as Assert; + +#[AsResource( + formType: BookType::class, +) +#[Create] +class Book implements ResourceInterface +{ + // ... + #[Assert\NotBlank()] + private ?string $title; +} +``` + +In this example, validation will fail when adding a new book without specifying its title on the form. + +## on API request + +```php +namespace App\Entity; + +use App\Form\Type\BookType; +use Sylius\Resource\Metadata\Api\Post; +use Sylius\Resource\Model\ResourceInterface; +use Sylius\Resource\Metadata\AsResource; +use Symfony\Component\Validator\Constraints as Assert; + +#[AsResource() +#[Post] +class Book implements ResourceInterface +{ + // ... + #[Assert\NotBlank()] + private ?string $title; +} +``` + +In this example, validation will fail when adding a new book without specifying its title on the payload. + +## Disable validation + +In some case, you may want to disable this validation. + +For example, in a "publish" operation, you may want to apply a state machine transition without validation existing data. + +```php +namespace App\BoardGameBlog\Infrastructure\Sylius\Resource; + +use App\BoardGameBlog\Infrastructure\Sylius\State\Http\Processor\PublishBoardGameProcessor; +use App\BoardGameBlog\Infrastructure\Sylius\State\Http\Provider\BoardGameItemProvider; +use App\BoardGameBlog\Infrastructure\Symfony\Form\Type\BoardGameType; +use Sylius\Resource\Metadata\ApplyStateMachineTransition; +use Sylius\Resource\Model\ResourceInterface; +use Sylius\Resource\Metadata\AsResource; +use Sylius\Resource\Metadata\Create; +use Symfony\Component\Validator\Constraints as Assert; + +#[AsResource( + formType: BoardGameType::class, +) +#[Update( + provider: BoardGameItemProvider::class, + processor: PublishBoardGameProcessor::class, + validate: false, // disable resource validation + )] +class BoardGameResource implements ResourceInterface +{ +} +``` + +**[Go back to the documentation's index](index.md)** + +**[> Next chapter: Redirect](redirect.md)**