*/ final readonly class UserPasswordHasherProcessor implements ProcessorInterface { /** * @param ProcessorInterface $persistProcessor */ public function __construct( #[Autowire(service: 'api_platform.doctrine.orm.state.persist_processor')] private ProcessorInterface $persistProcessor, private UserPasswordHasherInterface $passwordHasher, ) {} /** * @param User $data */ public function process(mixed $data, Operation $operation, array $uriVariables = [], array $context = []): mixed { $plainPassword = $data->getPassword(); if (null !== $plainPassword && !str_starts_with($plainPassword, '$')) { $data->setPassword($this->passwordHasher->hashPassword($data, $plainPassword)); } return $this->persistProcessor->process($data, $operation, $uriVariables, $context); } }