2017-04-27 2 views
0

Je suis en train de stocker des données cryptées dans ma base de données d8 et décrypter pour l'afficher aux utilisateurs autorisés:drupal 8 node-> setTitle

use \Defuse\Crypto\Key; 
use \Defuse\Crypto\Crypto; 

function my_module_node_load($nodes) {  
    $key = loadEncryptionKeyFromConfig(); 
    $title = $nodes[1]->getTitle(); // $title is "def369u8765" 
    $decrypted_title = Crypto::decrypt($title, $key); //$decrypted_title is 'a test note' 
    $nodes[1]->setTitle($decrypted_title); 
    $nodes[1]->getTitle(); // returns 'a test note' 
    return $nodes; 
} 

Quand il se fait affiché sur ma page, il est toujours la version cryptée. Dans la base de données, node_field_revision affiche toujours la version cryptée et l'horodatage est inchangé depuis hier.

Qu'est-ce que je fais mal? comment devrais-je retourner la version décryptée?

Je ne veux pas le décrypter dans ma base de données. Il doit rester crypté sur le disque.

EDIT: J'ai ajouté $ nodes [1] -> save(); et il est (de manière prévisible) entré dans une boucle infinie parce que node_load est appelé dans le cadre du processus save().

EDIT: Je sais que je ne devrais pas coder le [1]! Une fois que j'ai un noeud trié, je vais le mettre dans une boucle sur tous les nids dans $ noeuds

Répondre

1

Il s'avère que la mise en cache était en train de trébucher - le code fonctionne bien.

drupal cr all 

a fait l'affaire.

Je suis nouveau à x drupal, ne me jugez pas

0

J'ai le même genre d'exigence, résolue à l'aide

use Drupal\views\Views; 
function my_module_node_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) { 

// parse node $build 

} 

OU en crochet thème prétraiter

function themename_preprocess_node(&$variables) { 
}