在循环中注册Laravel服务提供商

时间:2015-02-11 15:51:06

标签: php laravel laravel-5

我正在尝试添加在应用中启用插件的功能。为此,我想为PluginManager类注册一个服务提供程序,该类将扫描 / Plugin 目录中已安装的插件'最终用户(即在那里拖放)。我不希望最终用户必须手动将每个插件的服务提供商添加到标准提供者数组等。

我希望每个安装的插件都有自己的服务提供商。那么,是否可以在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);
       }

   }

}
你怎么看?我完全错误地采取了这种方式吗?

1 个答案:

答案 0 :(得分:3)

你尝试过使用:

App::register('FooServiceProvider');

?如果您的提供程序是自动加载的,那应该可以解决问题。如果他们不是你,你很可能不得不手动自动加载它们,然后在每个上面打电话。