防止无限循环更新自身的更新功能?

Prevent infinite loop on update function that updates itself?

我将 Drupal 7 与 Commerce 一起使用,尽管我认为这并不重要。

有一个挂钩(函数)hook_entity_update() 在更新实体(我的购物车)时调用。

我想在此挂钩中重新计算我的运费,问题是一旦重新计算运费它会再次保存实体,因此它会再次调用挂钩,让我陷入无限循环。

解决此类问题的最佳方法是什么?

我正在考虑使用一个简单的 $_SESSION 变量,例如 $_SESSION['updating'] 并在挂钩开始时将其设置为 TRUE,然后在挂钩结束时再次将其设置为 FALSE如果变量设置为 true,并在开始时阻止函数从 运行 a return?我不确定这是否是一个好的解决方案?

使用会话变量,因为它是一个表单,提交时似乎会多次调用该函数。 不确定常规变量是否有效?

我已经 运行 遇到的一个问题是变量在函数结束时不知何故没有被重置,因此函数再也不会被调用 ...

使用会话变量似乎可行。 单击一个按钮时,愚蠢的函数以某种方式被调用了 7 次...

在函数开头添加:

      // Check if entity is a commerce_order
      if ($type != 'commerce_order') {
        return;
      }

      // Only apply if order is still in cart
      if ($entity->status != 'cart') {
        return;
      }

      if (isset($_SESSION['bab_checkout']['updating']) &&
        $_SESSION['bab_checkout']['updating'] === true) {
        return;
      }
      $_SESSION['bab_checkout']['updating'] = true;

然后在函数的末尾:

  // We're done updating
  $_SESSION['bab_checkout']['updating'] = false;

还在想有没有更好的解决办法?