3

次のコード スニペットがありますが、動作していないようです。

$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し、トランザクションへの参照で変数にして、クロージャ関数の外で使用します。これはもっと簡単にできますか、それともこれを使用する方法ですか?

4

1 に答える 1

14

次のように、トランザクション クロージャの戻り値を変数に割り当てることができます。

$paymentGatewayTransaction = $this->processTransaction($data);
$var = 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');
});
return $var;

その後、 $var を使用して戻ることができます。

于 2013-06-19T08:57:54.777 に答える