我正在嘗試添加功能以在應用中啓用插件。爲此,我想爲PluginManager類註冊一個服務提供者,它將掃描/Plugin目錄中的插件,這些插件已被最終用戶「安裝」(即在那裏拖放)。我不希望最終用戶必須手動將每個插件的服務提供商添加到標準提供商陣列等。在環路中註冊Laravel服務提供商
我希望每個安裝的插件都有自己的服務提供商。因此,是否可以在PluginManager的服務提供商的循環中動態註冊這些服務提供商,該服務提供商將添加到標準提供商數組中?可能使用App :: register()方法?
這是僞代碼,但我想沿着線的東西:
PluginManagerServiceProvider.php
<?php namespace Plugins;
use Illuminate\Support\ServiceProvider;
class PluginManagerServiceProvider extends ServiceProvider {
public function register()
{
$this->app->singleton('PluginManager', function($app)
{
return new PluginManager();
});
$pluginManager = $this->app->make('PluginManager');
// Register other plugin Service Providers in a loop here?
foreach ($pluginManager->getInstalledPlugins() as $plugin)
{
$this->app->register($plugin->getServiceProviderPath);
}
}
}
你覺得呢?我是否完全錯誤地進行了這個?
對於它的價值,我個人沒有看到你在做什麼的問題。我剛剛在4.2版本上做了一個快速測試,結果顯示,將插件服務提供程序添加到'app/config/app.php'並在其中註冊其他服務提供程序實際上會激發動態註冊的插件提供程序,這樣做對你來說沒有任何問題。 – 2015-02-11 16:21:38