我正在使用 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 的新类,我必须将其添加到绑定/标签中?我想自动完成。
谢谢 !