dinhdjj/laravel-auto-db-transaction-middleware

该包已被弃用且不再维护。未建议替代包。

一个laravel中间件,自动在每个请求上激活数据库事务


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

这里应该放你的描述。限制在一两段话之内。考虑添加一个小示例。

要求

* Laravel 9+
* php 8.1+

安装

你可以通过composer安装此包

composer require dinhdjj/laravel-auto-db-transaction-middleware

使用

首先,你应该将中间件注册到组中,或者你可以将中间件用于特定的路由。

/**
 * The application's route middleware groups.
 *
 * @var  array
 */
protected $middlewareGroups = [
    'web' => [
        ...,
        \Dinhdjj\AutoDBTransaction\AutoDBTransactionMiddleware::class,
    ],

    'api' => [
        ...,
        \Dinhdjj\AutoDBTransaction\AutoDBTransactionMiddleware::class,
    ]

以上就是你需要做的所有事情。

工作原理

以下我将向您展示它如何自动在每个请求上激活数据库事务。

  1. 它仅在POSTPUTPATCHDELETE...(不是GET)方法上激活beginTransaction
  2. 在所有情况下,它将自动commit,只有在遇到未处理的异常时才会rollback
  3. 它也会在某些情况下抛出异常。
    • 当你忘记在你的beginTransaction上执行commitrollback时。
    • 当你使用冗余的commitrollback数据库事务时。

异常处理程序

当抛出异常时,在大多数情况下,此包的行为将是rollBack数据库事务,但如果你没有使用laravel的默认日志异常处理程序,则此包将评估你已处理异常,并且它将继续commit数据库事务。

以下是不使用laravel的默认日志异常处理程序的案例示例

//App\Exceptions\Handler

$this->reportable(function (InvalidOrderException $e) {
    //
})->stop();

$this->reportable(function (InvalidOrderException $e) {
    return false;
});

namespace App\Exceptions;
 
use Exception;
 
class InvalidOrderException extends Exception
{
    /**
     * Report the exception.
     *
     * @return bool|null
     */
    public function report()
    {
        return true;
        // or
        return null;
    }
}

如果你没有使用laravel的默认日志异常处理程序并且你想rollBack数据库事务,你可以使用这个

// 1. use your own db-transaction
DB::beginTransaction();
// your code
DB::rollBack();
// 2. You helper method to rollback the package's db-transaction
$this->reportable(function (InvalidOrderException $e) {
    \Dinhdjj\AutoDBTransaction\Facades::rollBack();
})->stop();

测试

composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全漏洞

请审查我们的安全策略以了解如何报告安全漏洞。

致谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。