动态加载服务提供商

时间:2014-02-14 05:29:38

标签: module laravel-4 hmvc

我正在为一个服务器的三个不同版本创建一个带有控制面板的应用程序,它们可能有不同的数据库布局(这就是我模块化的原因)。我正在关注this tutorial

如何动态加载仅更正服务器版本的服务提供商?每个版本都有自己的文件夹,存储的所选版本可通过Config :: get访问,是否在加载服务提供程序时已加载?

另外,如果我使用HMVC架构,我是否仍然可以将默认文件夹(而不是模块)用于应用程序范围的服务器通用控制器? (比如新闻,不依赖于服务器)。

如果我不清楚,请询问。

1 个答案:

答案 0 :(得分:0)

据我所知,你不能在没有在代码中做一些奇怪的事情的情况下动态加载服务提供商,但服务提供商本身就是类加载器,你应该使用一个服务提供商来动态加载你的服务:

<?php

class ServiceProvider extends Illuminate\Support\ServiceProvider {

    protected $defer = true;

    public function register()
    {
        $this->app->bind('server', function($app) {

            switch ($this->app['config']['serverVersion']) {
                case 'versionX':
                    return new ServiceClassForServerX();
                    break;

                case 'versionY':
                    return new ServiceClassForServerY();
                    break;

                default:
                    return new ServiceClassForDefaultServer();
                    break;
            }
        });
    }

    public function provides()
    {
        return array('sever');
    }

}

关于文件夹,Laravel让您100%自由选择要在app/*中使用的任何文件夹结构。