@@ -7,6 +7,7 @@ Providers retrieve data from your persistence layer.
77 * [ Custom repository method] ( #custom-repository-method )
88 * [ Custom repository arguments] ( #custom-repository-arguments )
99* [ Custom providers] ( #custom-providers )
10+ * [ Disable providing data] ( #disable-providing-data )
1011<!-- TOC -->
1112
1213## Default providers
@@ -34,7 +35,11 @@ declare(strict_types=1);
3435
3536namespace App\Entity;
3637
37- #[Resource]
38+ use Sylius\Resource\Metadata\AsResource;
39+ use Sylius\Resource\Metadata\Show;
40+ use Sylius\Resource\Model\ResourceInterface;
41+
42+ #[AsResource]
3843#[Show(repositoryMethod: 'findOneByEmail')]
3944final class Customer implements ResourceInterface
4045{
@@ -61,7 +66,11 @@ declare(strict_types=1);
6166
6267namespace App\Entity;
6368
64- #[Resource]
69+ use Sylius\Resource\Metadata\AsResource;
70+ use Sylius\Resource\Metadata\Show;
71+ use Sylius\Resource\Model\ResourceInterface;
72+
73+ #[AsResource]
6574#[Show(repositoryMethod: 'findOneByEmail', repositoryArguments: ['email' => "request.attributes.get('email')"])]
6675final class Customer implements ResourceInterface
6776{
@@ -115,15 +124,84 @@ declare(strict_types=1);
115124namespace App\BoardGameBlog\Infrastructure\Sylius\Resource;
116125
117126use App\BoardGameBlog\Infrastructure\Sylius\State\Provider\BoardGameItemProvider;
127+ use Sylius\Resource\Metadata\AsResource;
128+ use Sylius\Resource\Metadata\Show;
129+ use Sylius\Resource\Model\ResourceInterface;
118130
119- #[Resource ]
131+ #[AsResource ]
120132#[Show(provider: BoardGameItemProvider::class)]
121133final class BoardGameResource implements ResourceInterface
122134{
123135 // [...]
124136}
125137```
126138
139+ ## Disable providing data
140+
141+ In some cases, you may want not to read data.
142+
143+ For example, in a delete operation, you can implement your custom delete processor without reading it before.
144+
145+ ``` php
146+ // src/BoardGameBlog/Infrastructure/Sylius/Resource/BoardGameResource.php
147+
148+ declare(strict_types=1);
149+
150+ namespace App\BoardGameBlog\Infrastructure\Sylius\Resource;
151+
152+ use App\BoardgameBlog\Infrastructure\Sylius\State\Provider\DeleteBoardGameProcessor;
153+ use Sylius\Resource\Metadata\AsResource;
154+ use Sylius\Resource\Metadata\Delete;
155+ use Sylius\Resource\Model\ResourceInterface;
156+
157+ #[AsResource]
158+ #[Delete(
159+ processor: DeleteBoardGameProcessor::class,
160+ read: false,
161+ )]
162+ final class BoardGameResource implements ResourceInterface
163+ {
164+ // [...]
165+ }
166+ ```
167+
168+ ``` php
169+ // src/BoardGameBlog/Infrastructure/Sylius/State/Processor/DeleteBoardGameProcessor.php
170+
171+ namespace App\BoardGameBlog\Infrastructure\Sylius\State\Processor;
172+
173+ use App\BoardGameBlog\Application\Command\DeleteBoardGameCommand;
174+ use App\BoardGameBlog\Domain\ValueObject\BoardGameId;
175+ use App\BoardGameBlog\Infrastructure\Sylius\Resource\BoardGameResource;
176+ use App\Shared\Application\Command\CommandBusInterface;
177+ use Sylius\Resource\Context\Context;
178+ use Sylius\Resource\Context\Option\RequestOption;
179+ use Sylius\Resource\Metadata\Operation;
180+ use Sylius\Resource\State\ProcessorInterface;
181+ use Webmozart\Assert\Assert;
182+
183+ final class DeleteBoardGameProcessor implements ProcessorInterface
184+ {
185+ public function __construct(
186+ private CommandBusInterface $commandBus,
187+ ) {
188+ }
189+
190+ public function process(mixed $data, Operation $operation, Context $context): mixed
191+ {
192+ Assert::isInstanceOf($data, BoardGameResource::class);
193+
194+ // Data is not provided in this case, so you will need to get it from the HTTP request
195+ $id = $context->get(RequestOption::class)?->attributes->get('id') ?? null;
196+ Assert::notNull($id);
197+
198+ $this->commandBus->dispatch(new DeleteBoardGameCommand(new BoardGameId($id)));
199+
200+ return null;
201+ }
202+ }
203+ ```
204+
127205** [ Go back to the documentation's index] ( index.md ) **
128206
129207** [ > Next chapter: Processors] ( processors.md ) **
0 commit comments