drupal 8 node-›setTitle

Я пытаюсь сохранить зашифрованные данные в своей базе данных d8 и расшифровать их, чтобы отобразить их авторизованным пользователям:

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;
}

Когда он действительно отображается на моей странице, это все еще зашифрованная версия. В базе данных node_field_revision по-прежнему показывает зашифрованную версию, а отметка времени не изменилась со вчерашнего дня.

Что я делаю неправильно? как мне вернуть расшифрованную версию?

Я НЕ хочу расшифровывать его в своей базе данных. Он должен оставаться зашифрованным на диске.

РЕДАКТИРОВАТЬ: я добавил $nodes[1]->save(); и это (как и ожидалось) вошло в бесконечный цикл, потому что node_load вызывается как часть процесса save().

РЕДАКТИРОВАТЬ: я знаю, что я не должен жестко кодировать [1]! Как только я отсортирую этот узел, я зациклю его на всех nid в $nodes.


person WeeDom    schedule 27.04.2017    source источник


Ответы (2)


Оказывается, кеширование меня сбивало с толку — код работает нормально.

drupal cr all

сделал трюк.

Я новичок в drupal x, не судите меня

person WeeDom    schedule 27.04.2017

У меня есть аналогичные требования, разрешенные с помощью

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

}

ИЛИ в хуке темы предварительной обработки

function themename_preprocess_node(&$variables) { 
}
person Chaitanyakul    schedule 02.05.2017