<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
niclas-van-eyk / laravel-transactional-controllers example snippets
class ExampleUsageController
{
#[Transactional]
public function demo(Request $request)
{
User::create($request->all());
User::create($request->all());
throw new Exception("Everything will be rolled back!");
}
}
namespace App\Http\Controllers;
use App\Http\Requests\TransferMoneyRequest;
use App\Models\TransferLog;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class BankAccountController
{
public function transferMoney(TransferMoneyRequest $request)
{
return DB::transaction(function () use ($request) {
$request->author->balance->decrement($request->amount);
$request->receiver->balance->increment($request->amount);
return TransferLog::createFromTransferRequest($request);
})
}
}
namespace App\Http\Controllers;
use App\Http\Requests\TransferMoneyRequest;
use App\Models\TransferLog;
use Illuminate\Http\Request;
use NiclasVanEyk\TransactionalControllers\Transactional; // <-- from this package
class BankAccountController
{
#[Transactional]
public function transferMoney(TransferMoneyRequest $request): TransferLog
{
$request->author->balance->decrement($request->amount);
$request->receiver->balance->increment($request->amount);
return TransferLog::createFromTransferRequest($request);
}
}
#[Transactional(connection: 'other')]
public function store() {}
use NiclasVanEyk\TransactionalControllers\Transactional;
// Works ✅
class RegularController
{
#[Transactional]
public function store() {}
}
Route::post('/regular-store', [RegularController::class, 'store']);
// Works ✅
class InvokableController
{
#[Transactional]
public function __invoke() {}
}
Route::post('/invokable-store', InvokableController::class);
// Does not work ❌
Route::post(
'/invokable-store',
#[Transactional]
function () { /* Will not open a transaction! */},
)
bash
composer analyse
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.