golossus/php-lazy-proxy-loading

提供一种代理类工厂,以懒加载和无缝方式加载服务

v1.0.2 2021-01-19 11:10 UTC

This package is auto-updated.

Last update: 2024-08-28 13:03:45 UTC


README

Build Status codecov Version Total Downloads License

php-lazy-proxy-loading是一个通过使用懒加载策略简化PHP类(或服务)加载过程的包。这对于依赖注入容器(负责构建许多应用程序的服务)特别有用。

此包通过提供代理类工厂来实现,它可以创建任何PHP类或服务的代理类。只有在实际需要时,即在其公共方法的第一次调用时,才会构建实际的服务。

鉴于当前Laravel框架中尚无内置的服务懒加载策略,将此库与Laravel框架结合使用特别有趣。我们开始这个库是为了解决使用Laravel时遇到的依赖注入问题,这些问题可以通过懒加载某些服务轻松解决。

安装

composer require golossus/php-lazy-proxy-loading

使用

基本使用示例

use Golossus\LazyProxyLoading\ProxyClassFactory;
...
$myClassProxy = ProxyClassFactory::create(\MyClass::class, function () {
    return new \MyClass(/* dependencies */);
}); 

在上面的示例中,$myClassProxy扩展了MyClass类型,它作为适配器以底层服务的行为出现,因此它可以无缝地作为真实服务注入。最终的服务将在我们通过使用ProxyClassFactory::create方法的第二个参数传递的回调函数调用其任何公共方法时构建。

echo $myProxyClass->myClassPrublicMethod(); // MyClass service is created at this point
echo $myProxyClass->myClassPrublicMethod(); // MyClass service is already created at this point, so it's not re-built

Laravel

对于Laravel框架,此包提供了一个特殊的trait,以无缝地使用代理工厂与其依赖注入容器。您可以在任何Laravel服务提供者中使用此trait,并将任何服务定义为lazy

..
use Illuminate\Support\ServiceProvider;
use Golossus\LazyProxyLoading\LazyLoadingTrait;
..

class MainProvider extends ServiceProvider
{
    use LazyLoadingTrait;

    public function register()
    {
        // common laravel service registration, not lazy
        $this->app->singleton(CustomMailingService::class, function () {
                $mailer = $this->app->make(Mailer::class);
                return new CustomMailingService($mailer);
            }
        );
    
        // or same service registration but lazy loaded
        $this->app->singleton(...$this->lazy(CustomMailingService::class, function () {
                $mailer = $this->app->make(Mailer::class);

                return new CustomMailingService($mailer);
            }
        ));
    }
}

社区

  • 加入我们的Slack,与社区见面并获得支持。
  • GitHub上关注我们。
  • 阅读我们的行为准则

贡献

这是一个开源项目。Golossus团队希望使其成为社区驱动的,并开放给贡献者。请参阅贡献文档

安全问题

如果您发现安全漏洞,请按照我们的披露程序操作。

关于我们

此包的开发由Golossus团队领导者领导,并得到贡献者的支持。