Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello,
J'ai besoin d'encrypter certaine données sensibles dans ma base de données tel que adresse, téléphone, etc.
après qu'un formulaire soit posté par exemple. J'utilise actuellement TableGateway avec un model comme dans la doc pour accéder/modifier aux données de ma db, tout est ok.
J'aimerai utiliser BlockCipher comme recommandé pour encrypter/décrypter les données, ma question est à quel niveau je dois faire ca. Dans le model ? dans le controller ?
Quelle est la meilleure méthode ?
Voici un service que j'ai créé:
...
'MyBlockCipherService' => function ($sm) {
$blockCipher = BlockCipher::factory('mcrypt', array('algo' => 'aes'));
$blockCipher->setKey('test');
return $blockCipher;
},
...
Je pensais appeler ce service directement dans le model et créer un fonction qui encrypt toutes les variables mais je n'ai pas accès au serviceLocator. Et si j'implémente ServiceLocatorAwareInterface dans mon model, ca créer une boucle et je reçois un "Fatal error: Allowed memory size of 134217728 bytes exhausted"
Merci de votre aide!
Michael
Hors ligne
Salut, concernant la méthode je ne connais pas le service que tu veux utiliser par contre une chose est sûre le modèle n'a jamais accès au service !!! Dans une couche MVC idéale tu as quelque chose comme ça :
Contrôleur > Service > Modele
Et la couche enfant n'a pas accès à la couche parente.
Hors ligne
Merci pour ta réponse.. Donc je dois le faire dans mon controller, entre la validation de mon formulaire et l'insertion ou modification de ma db.
Le $data = $form->getData() après $form->isValid() me retourne mon objet (car j'utilise $form->bind(xx) ) et je dois donc encrypter et réassigner chaque propriété ici avec mon service d'encryptage avant de faire appelle à $this->getUserAddressTable()->edit($data) ??
C’était ma première idée et me parait assez logique mais en meme temps ca me parait assez compliqué à mettre en place dans le cas inverse, lors de la lecture de données pour les afficher dans mon formulaire. Le controller fait appelle au service de la db, je reçois mon objet dans mon controller, je dois reprendre chaque propriété, les décrypter et réassigner les nouvelles valeurs décryptées ?
Partages-tu cette logique ?
Hors ligne
Non pas tout à fait, en fait c'est ton service qui enregistre et récupère les données qui doit s'occuper de ça. Donc effectivement dans ce même service tu vas appeler le service d'encryptage mais ça tu as le droit. Le contrôleur doit vraiment servir de contrôleur ! C'est à dire récupérer les données de la requêtes, les valider (éventuellement, pour cette partie certains sont partisan de le faire dans le service d'autre dans le contrôleur), les transmettre aux services puis les renvoyer à la vue.
Hors ligne
Ok merci je vois ca, effectivement c'est mieux. Donc je propose d'injecter mon service d'encryptage directement dans le service d'accès à la db comme ceci, et après de modifier mon code dans UserAddressTable afin de faire appel à l'encryptage/décryptage...
'Application\Model\UserAddressTable' => function($sm) {
$tableGateway = $sm->get('UserAddressTableGateway');
$blockCipherService = $sm->get('MyBlockCipherService');
$table = new UserAddressTable($tableGateway, $blockCipherService);
return $table;
},
Moi ca me parait correcte. T'en penses quoi?
Hors ligne
Si UserAddressTable est un service ça me semble correcte. Tu peux pour que ça soit plus propre créer une factory plutôt que d'utiliser les fonctions anonymes.
Hors ligne
Pages: 1