RESTful Web サービスを介してサードパーティ システムに注文データを送信するスクリプトがあります。このシステムは、各リクエストで一意の ID を送信することを要求します。この ID は、次から自動インクリメントされます。
これは、Magento のcore_config_data
テーブルに変数を追加することで実装しました。コードの一部として、ID の次の値を取得するために以下の関数が呼び出され、次のリクエストのために値がインクリメントされます。
class MyProject
{
public function getNextApiId() {
// Get the next ID.
$id = Mage::getStoreConfig('myproject/next_api_id');
// Increment the stored value for next time.
$nextId = $id + 1; // change $id++ by $id + 1 otherwise the result of $nextId = $id - 1;
Mage::getModel('core/config')->saveConfig('myproject/next_api_id',$nextId);
// Refresh the config.
Mage::getConfig()->cleanCache();
Mage::getConfig()->reinit();
// Return the ID.
return $id;
}
}
スクリプトで 1 つの要求を送信すると、これは正常に機能します。値が増加し、次の ID がスクリプトの次の実行に使用されます。
ただし、同じスクリプト実行内のループで複数の要求を処理している場合、値はキャッシュされているように見えます。以下のコードは、簡潔にするために簡略化していますが、一般的なフローを示しています。
function sendRequest($item) {
$apiId = $MyProject->getNextApiId();
// Build and send request body
}
foreach($items as $item) {
sendRequest($item);
}
これにより、最初の ID 番号がすべての に使用されます$items
。
および構成キャッシュを更新しようとしてもcleanCache()
、reinit()
まったく機能していないようです。値がキャッシュされないようにする方法についてのアイデアはありますか?