我有下面的代码片段,我似乎不能让它工作。
$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
和7
上返回Response::json()似乎没有任何影响。该响应从未到达浏览器。
如果我将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
,并将其作为引用事务的变量,以便在闭包函数外部使用它。这能更简单吗?或者这是使用它的方法吗?
可以将事务闭包的返回值赋给如下变量:
$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返回