У меня есть следующий фрагмент кода, который я не могу заставить его работать.Возвращаемые данные изнутри транзакции в Laravel 4
$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');
}
Возвращение Ответ :: JSON() на линиях 5
и 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
за пределами Закрытие и сделал его в качестве переменной в качестве ссылки на сделку, чтобы использовать его вне функции закрытия. Может ли это быть проще или это способ использовать его?
Это очень интересно, так как это означает, что любые операторы return изнутри 'transaction()' остаются в 'transaction()' очень похожим на инструкцию функции. – enchance