次のコード スニペットがありますが、動作していないようです。
$paymentGatewayTransaction = $this->processTransaction($data);
DB::connection('new_db')->transaction(function () use ($paymentGatewayTransaction) {
//Performing all DB transactions here to insert Order Information.
if ($paymentGatewayTransaction['Status'] == "APPROVED")
return Response::json(array('Status' => 'Success'), '200'); else
return Response::json(array('Status' => 'Error'), '200');
});
function processTransaction($data) {
//Process Gateway Transaction
if ($gatewayWasSuccessfull)
return array('Status' => 'APPROVED'); else
return array('Status' => 'DECLINED');
}
5
行にResponse::json() が返さ7
れ、まったく効果がないようです。応答がブラウザに到達することはありません。
if 条件を行からクロージャー関数の外側に移動すると、4
正常8
に動作します。
回避策として、最終的に次のことを行う必要がありました。
$paymentGatewayTransaction = $this->processTransaction($data);
$orderObj = "";
DB::connection('new_db')->transaction(function () use ($paymentGatewayTransaction, &$orderObj) {
//Performing all DB transactions here to insert Order Information.
// **$orderObj is set here**
});
if ($paymentGatewayTransaction['Status'] == "APPROVED")
return Response::json(array('Status' => 'Success', 'Order' => $orderObj->id), '200'); else
return Response::json(array('Status' => 'Error'), '200');
function processTransaction($data) {
//Process Gateway Transaction
if ($gatewayWasSuccessfull)
return array('Status' => 'APPROVED'); else
return array('Status' => 'DECLINED');
}
クロージャの外でオブジェクトを作成$orderObj
し、トランザクションへの参照で変数にして、クロージャ関数の外で使用します。これはもっと簡単にできますか、それともこれを使用する方法ですか?