小编tot*_*che的帖子

Laravel 标记所有实现接口的类

我正在使用 Laravel 8,我想获取实现 Interface X 的所有类。

几个月前我用 symfony4 和 DI 做到了:

服务.yml

_instanceof:
    App\Calculator\Budget\BudgetCalculatorInterface:
      tags: ['app.budget_calculator']
App\Handler\CalculatorBudgetHandler:
  arguments: [!tagged app.budget_calculator]
Run Code Online (Sandbox Code Playgroud)

然后在我的类 CalculatorBudgetHandler.php 中

private $calculatorList = [];

public function __construct(iterable $calculatorList)
{
    $this->calculatorList = $calculatorList;
}

public function __construct(iterable $calculatorList)
{
    $this->calculatorList = $calculatorList;
}

public function calculate(array $data): float
{
    foreach ($this->calculatorList as $calculator) {
        if ($calculator->supports($data)) {
            return $calculator->calculate($data);
        }
    }

  
}
Run Code Online (Sandbox Code Playgroud)

但我不明白如何用 Laravel 做到这一点。我想我必须在绑定或标记中传递所有类:

$this->app->tag([CpuReport::class, MemoryReport::class], 'reports');
Run Code Online (Sandbox Code Playgroud)

这意味着如果我有一个实现 X 的新类,我必须将其添加到绑定/标签中?我想自动完成。

谢谢 !

tags bind interface laravel

6
推荐指数
1
解决办法
1011
查看次数

标签 统计

bind ×1

interface ×1

laravel ×1

tags ×1