我怎样才能使laravel4 Config ::像这样开始工作?

时间:2015-07-06 15:15:59

标签: php laravel laravel-4 config setting

我是laravel初学者 我发现了一个laravel 4脚本,它使用config目录中的文件来定义以这种方式存在的站点:

该站点的配置位于:directory(config / site)

示例:app / 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

这样的正常方式编写完整路径

1 个答案:

答案 0 :(得分:0)

通过 Illuminate \ Foundation \ Bootstrap \ LoadConfiguration 类在应用程序引导过程中加载配置文件。如果要更改配置文件的加载方式,则需要通过扩展现有加载器来实现自己的加载器。小心只更改自己的配置文件的加载方式 - 不要改变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 类中添加以下内容:

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

    return $bootstrappers;
}

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