私のconfig/messanger.yamlは次のようになります:
framework:
messenger:
default_bus: command.bus
buses:
command.bus:
middleware: 'Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware'
query.bus: ~
コマンドのコマンド ハンドラはUpdateUser
次のようになります。
final class UpdateUserHandler implements CommandHandlerInterface
{
/**
* @var Users
*/
private Users $users;
public function __construct(Users $users)
{
$this->users = $users;
}
public function __invoke(UpdateUser $command)
{
$user = $command->getUser();
$user->setName($command->getName());
}
そして今、コントローラーからこのコマンドをディスパッチしています:
final class UserController extends AbstractController
{
private CommandBus $commandBus;
public function __construct(CommandBus $commandBus)
{
$this->commandBus = $commandBus;
}
public function __invoke(Request $request, User $user): Response
{
$this->commandBus->dispatch(new UpdateUser($user, $name));
return $this->render('user.html.twig', []);
}
}
ミドルウェアの自動フラッシュがDoctrineTransactionMiddleware
機能しない理由を教えてください。私は何が欠けていますか?