larapackages/interceptor

该软件包最新版本(7.1.0)没有可用的许可证信息。

Laravel 拦截器模式

7.1.0 2020-05-03 13:05 UTC

This package is auto-updated.

Last update: 2024-09-15 00:19:24 UTC


README

Build Status StyleCI Status Codacy Badge StyleCI Status

为什么我需要它

拦截对类和逻辑抽象部分的调用,并将其分解为更小的类

安装

使用composer安装

composer require larapackages/interceptor

发布

php artisan vendor:publish --provider="Larapackages\Interceptor\Providers\InterceptorServiceProvider"

用法

在你的 SomeClass 中实现 Larapackages\Interceptor\InterceptorInterface

class SomeClass implements \Larapackages\Interceptor\InterceptorInterface {
    public static function interceptors(): array
    {
        return [
            // Classes namespaces that will intercept this class
        ];
    }
};

然后你必须使用Laravel容器使拦截器类工作。

Laravel容器解析文档

$class = app()->make(SomeClass::class);
$class = resolve(SomeClass::class);

修改参数

class ArgInterceptor {
    public function getName($name) {
        $name = mb_strtoupper($name);
        
        return compact('name');
    }
};

class ArgClass implements \Larapackages\Interceptor\InterceptorInterface {
    public function getName($name) {
        return $name;
    }

    public static function interceptors(): array
    {
        return [
            ArgInterceptor::class
        ];
    }
};

$class = app()->make(ArgClass::class)->getName('fake'); //Will return Fake

验证数据

class ArgInterceptor {
    public function getValidData(array $data) {
        $validator = \Illuminate\Support\Facades\Validator::make($data, [
            'id' => 'required',
        ])->validate();
    }
};

class ArgClass implements \Larapackages\Interceptor\InterceptorInterface {
    public function getValidData(array $data) {
        return $data;
    }

    public static function interceptors(): array
    {
        return [
            ArgInterceptor::class
        ];
    }
};

$class = app()->make(ArgClass::class)->getValidData(['name' => 'fake']); //Will throw a validation exception
$class = app()->make(ArgClass::class)->getValidData(['id' => 1]); //Will return ['id' => 1]

返回响应

class ArgInterceptor {
    public function getName(string $name) {
        if ($name === 'test') {
            return 'Test Name';
        }
    }
};

class ArgClass implements \Larapackages\Interceptor\InterceptorInterface {
    public function getName(string $name) {
        return $name;
    }

    public static function interceptors(): array
    {
        return [
            ArgInterceptor::class
        ];
    }
};

$class = app()->make(ArgClass::class)->getName('test'); //Will return Test Name
$class = app()->make(ArgClass::class)->getName('second test'); //Will return second test

缓存

为了提高性能,该软件包有两个命令用于生成和清除缓存。如果存在缓存文件,软件包将自动使用它,否则它将扫描路径。

生成缓存

php artisan interceptor:cache

清除缓存

php artisan interceptor:clear

问题 & 贡献

如果你发现任何问题,请报告它或通过提交拉取请求进行贡献。