问题描述
我有一个编辑节点表单.当用户输入新值并单击提交以编辑节点时,我首先想取回旧节点,操作该值,然后保存/更新节点.
I have an editing node form. When user enters new value and clicks on submit to edit the node, I first want to get the old node back, manipulate the value and then just save/update the node.
以下是我的解决方案,但它不起作用.
Below is my solution, but it does not work.
function custom_module_form_node_form_alter(&$form, FormStateInterface $form_state) {
$editing_entity = $form_state->getFormObject()->getEntity();
if (!$editing_entity->isNew()) {
$form['actions']['submit']['#submit'][] = 'custom_module_node_form_submit';
}
}
function custom_module_node_form_submit($form, FormStateInterface $form_state) {
$editing_entity = $form_state->getFormObject()->getEntity();
$entity = Drupal::entityTypeManager()->getStorage('node')->load($editing_entity->id());
}
在 form_submit 钩子中,我试图取回旧节点,但已经太晚了,节点已经更新/保存.在 Drupal 8 中更新/保存节点之前,如何取回旧节点并操作该值?
In the form_submit hook, I tried to get the old node back but it is already too late and the node is already updated/saved. How can I get the old node back and manipulate the value before updating/saving the node in Drupal 8?
推荐答案
尝试使用hook_entity_presave()
:
/**
* Implements hook_entity_presave().
*/
function YOUR_MODULE_entity_presave(DrupalCoreEntityEntityInterface $entity) {
switch ($entity->bundle()) {
// Here you modify only your day content type
case 'day':
// Setting the title with the value of field_date.
$entity->setTitle($entity->get('field_date')->value);
break;
}
}
从这里采取的解决方案:https://drupal.stackexchange.com/questions/194456/how-to-use-presave-hook-to-save-a-field-value-as-node-title
Solution taken from here: https://drupal.stackexchange.com/questions/194456/how-to-use-presave-hook-to-save-a-field-value-as-node-title
您还可以获得旧值,例如:$entity->original
.在这里查看:
Also you can get old value like: $entity->original
. Check it out here:
https://drupal.stackexchange.com/questions/219559/how-to-get-the-original-entity-on-hook-entity-presave
这篇关于如何在节点保存在 Drupal 8 之前操作值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!