Laravel 8 绑定变长参数类型

2021-07-02 20:50 更新

有时,您可能有一个使用可变参数构造函数参数接收类型化对象数组的类:

class Firewall
{
    protected $logger;
    protected $filters;

    public function __construct(Logger $logger, Filter ...$filters)
    {
        $this->logger = $logger;
        $this->filters = $filters;
    }
} 

使用上下文绑定,您可以通过给 give 方法提供一个 Closure 来解决此依赖关系,该 Closure 返回已解析的 Filter 实例的数组:

$this->app->when(Firewall::class)
          ->needs(Filter::class)
          ->give(function ($app) {
                return [
                    $app->make(NullFilter::class),
                    $app->make(ProfanityFilter::class),
                    $app->make(TooLongFilter::class),
                ];
          });

为了方便起见,您还可以只提供一个类名称数组,以便在 Firewall 需要 Filter 实例时由容器解析:

$this->app->when(Firewall::class)
          ->needs(Filter::class)
          ->give([
              NullFilter::class,
              ProfanityFilter::class,
              TooLongFilter::class,
          ]);
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号