我怎样才能让 laravel4 Config::get 那样工作?

How can i make laravel4 Config::get work like that way?

我是 laravel 初学者 我找到了一个 laravel 4 脚本,它使用配置目录中的文件以这种方式定义站点:

站点的配置位于:目录 ( config/site )

示例:应用程序/config/site/video.php

return [
    'max-size-upload-video' => [
        'type' => 'integer',
        'title' => 'Set Maximum Size Upload Video',
        'description' => 'Set the maximum size upload of videos',
        'value' => '10000000',
    ],
];

在控制器中

Config::get('max-size-upload-video') 用于获取值,这不是 Config::get ..

的正常行为

我的问题是如何制作这样的东西? 我如何让 Config::get('the-property-title') 为我获取价值,而不像使用 Config::get

的正常方式那样写完整路径

配置文件在应用程序 bootstrap 过程中由 Illuminate\Foundation\Bootstrap\LoadConfiguration class 加载。如果你想改变配置文件的加载方式,你需要通过扩展现有的加载器来实现你自己的加载器。注意只更改您自己的配置文件的加载方式 - 不要更改 Laravel 配置文件的加载方式。

示例加载程序:

class CustomLoadConfiguration extends LoadConfiguration
{
    protected function loadConfigurationFiles(Application $app, RepositoryContract $config)
    {
        foreach ($this->getConfigurationFiles($app) as $key => $path) {
            if ($key === 'video') {
                $values = require $path;
                if (is_array($values)) {
                    foreach ($values as $k => $value) {
                        $config->set($k, $value);
                    }
                } else $config->set($key, $values);
            } else {
                $config->set($key, require $path);
            }
        }
    }
}

拥有自己的加载程序后,在 App\Http\Kernel class:

中添加以下内容
protected function bootstrappers()
{
    $bootstrappers = parent::bootstrappers();
    if (($key = array_search($bootstrappers, 'Illuminate\Foundation\Bootstrap\LoadConfiguration')) !== FALSE) {
        $bootstrappers[$key] = 'Your\Namespace\CustomLoadConfiguration';
    }

    return $bootstrappers;
}

警告:在你这样做之前,问问自己是否真的需要这个。配置文件被命名空间以避免冲突 - 如果您禁用命名空间,则存在将重复的密钥加载到不同文件的配置并且其中一个覆盖另一个的风险。