Skip to content

Commit 5eb1c35

Browse files
authored
minor #913 [Docs] Disable providing data (loic425)
This PR was merged into the 1.11 branch. Discussion ---------- | Q | A | --------------- | ----- | Bug fix? | no (but missing documentation) | New feature? | no | BC breaks? | no | Deprecations? | no | Related tickets | | License | MIT Commits ------- 2b3a1b1 [Docs] Disable providing data a7c0574 Fix static analysis 32fdd37 Fix few things a3576a0 Fix processing data without provider 9d94ae6 Link to disabling chapter b5bec77 Apply code review suggestions b973233 Apply suggestions from code review
2 parents 954c859 + b973233 commit 5eb1c35

File tree

2 files changed

+93
-5
lines changed

2 files changed

+93
-5
lines changed

docs/processors.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,11 @@ Use this processor on your operation.
6969
namespace App\Entity\Customer;
7070

7171
use App\Sylius\State\Processor\CreateCustomerProcessor;
72+
use Sylius\Resource\Metadata\AsResource;
73+
use Sylius\Resource\Metadata\Create;
74+
use Sylius\Resource\Model\ResourceInterface;
7275

73-
#[Resource]
76+
#[AsResource]
7477
#[Create(processor: CreateCustomerProcessor::class)]
7578
final class BoardGameResource implements ResourceInterface
7679
```
@@ -109,7 +112,11 @@ Use this processor on your operation.
109112

110113
namespace App\BoardGameBlog\Infrastructure\Sylius\Resource;
111114

112-
#[Resource(
115+
use Sylius\Resource\Metadata\AsResource;
116+
use Sylius\Resource\Metadata\Delete;
117+
use Sylius\Resource\Model\ResourceInterface;
118+
119+
#[AsResource(
113120
alias: 'app.board_game',
114121
section: 'admin',
115122
formType: BoardGameType::class,
@@ -120,6 +127,9 @@ namespace App\BoardGameBlog\Infrastructure\Sylius\Resource;
120127
final class BoardGameResource implements ResourceInterface
121128
```
122129

130+
Note that in a delete operation, you can disable providing data.
131+
See [Disable providing data](providers.md#disable-providing-data) chapter.
132+
123133
**[Go back to the documentation's index](index.md)**
124134

125135
**[> Next chapter: Responders](responders.md)**

docs/providers.md

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3536
namespace 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')]
3944
final class Customer implements ResourceInterface
4045
{
@@ -61,7 +66,11 @@ declare(strict_types=1);
6166

6267
namespace 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')"])]
6675
final class Customer implements ResourceInterface
6776
{
@@ -115,15 +124,84 @@ declare(strict_types=1);
115124
namespace App\BoardGameBlog\Infrastructure\Sylius\Resource;
116125

117126
use 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)]
121133
final 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

Comments
 (0)