防止无限循环更新自身的更新功能?
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;
还在想有没有更好的解决办法?
我将 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;
还在想有没有更好的解决办法?