edykim/laravel-container-helper

Laravel服务容器的简单助手

v0.0.2 2023-07-24 03:06 UTC

This package is auto-updated.

Last update: 2024-09-24 05:40:11 UTC


README

Latest Stable Version License PHP Version Require

此包为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,
          ),
        ),
      ),
    );
);