edykim / laravel-container-helper
Laravel服务容器的简单助手
v0.0.2
2023-07-24 03:06 UTC
Requires
- php: >=8.0.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.22
- phpunit/phpunit: ^10.2
README
此包为Laravel容器提供了一个简单的助手。它允许您生成一个内联实用类,该类实现了给定接口,使您的应用程序逻辑更加可配置。
入门指南
安装
$ composer require edykim/laravel-container-helper
惰性加载
此函数提供了一个给定具体实现的懒加载代理实例,用于惰性实例化。
use function Edykim\LaravelContainerHelper\Support\instance; // ... $app->bind( CalculatorInterface::class, instance(CalculatorInterface::class) ->lazy(HeavilyLoadedCalculator::class) );
序列
use function Edykim\LaravelContainerHelper\Support\instance; // ... $app->bind( CalculatorInterface::class, instance(CalculatorInterface::class) ->sequence( SimpleProductCalculator::class, DigitalProductCalculator::class, ShippingChargeCalculator::class, ) );
条件
class HasDigitalProducts { public function check(Cart $cart): bool { // ... } }
use function Edykim\LaravelContainerHelper\Support\instance; // ... $app->bind( CalculatorInterface::class, instance(CalculatorInterface::class) ->when( HasDigitalProduct::class, DigitalProductCalculator::class, SimpleProductCalculator::class, ) );
嵌套
use function Edykim\LaravelContainerHelper\Support\instance; use Edykim\LaravelContainerHelper\Support\Instance; // ... $app->bind( CalculatorInterface::class, instance(CalculatorInterface::class) ->with(fn (Instance $instance) => $instance->sequence( $instance->lazy( $instance->when( HasCouponWithThirdPartyCompany::class, ThirdPartyCouponCalculator::class, NothingCalculator::class, ), ), SimpleProductCalculator::class, DigitalProductCalculator::class, $instance->when( [IsPlusLevelCustomer::class, 'validate'], PlusLevelCustomerDiscountCalculator::class, $instance->when( [IsMedicalProvider::class, 'validate'], MedicalProviderDiscountCalculator::class, NothingCalculator::class, ), ), ), ); );