Dans un premier temps, j'ai utilisé postLoad dans l'Entity pour décrypter des données, les données décryptées étaient bien affichées dans le template twig.
Afin d'éviter du code dupliqué, en étendant le cryptage à d'autres données d'autres entités, j'utilise les entity listeners auxquelles je passe en argument le service container permettant d'instancier le service de cryptage/décryptage que j'ai mis en place. Tout fonctionne correctement, depuis le listener les variables recevant les données décryptées (firstname, lastname) contiennent bien les bonnes données mais elles ne sont pas affichées dans le template.
Dans le layout.tml.twig, on a {{ app.user.gender == "m" ? app.user.gender |capitalize : 'Mme' }} {{ app.user.firstname }} {{ app.user.lastname |upper }}
Dans le listener, on a :
// get service
$encrypter = $this->container->get("app_encrypter");
// get firstname
$this->firstname = $encrypter->Decryptage($user->getFirstname());
// get lastname
$this->lastname = $encrypter->Decryptage($user->getLastname());
Dans le services.yml, on a :
# Service Encrypter
app_encrypter:
class: Application\Sonata\UserBundle\Service\EncrypterService
arguments: []
# User EntityListener
app_user.listener:
class: Application\Sonata\UserBundle\EntityListener\UserListener
arguments: [ "@service_container" ]
tags:
- { name: doctrine.orm.entity_listener, entity: Application\Sonata\UserBundle\Entity\User }
Je pense qu'il manque quelque chose pour que les variables app.user.firstname & lastname utilisées dans le template soient alimentées avec les variables alimentées dans le listener mais je ne vois pas quoi.
Si quelqu'un peut m'expliquer, merci d'avance.
Partager