【问题标题】:Load Config File Before Library in Code Igniter在 Codeigniter 中的库之前加载配置文件
【发布时间】:2012-06-08 21:27:09
【问题描述】:

我正在我的 codeigniter 项目中加载 google-api-php-client 库(用于 oauth 2.0)。我想在配置文件中定义一系列配置值,以便它们可以与这个库一起使用。但是,我注意到库的配置信息是在我定义的配置文件之前加载的。

例如,在autoload.php 中,我将配置自动加载设置如下:

$autoload['config'] = array('my_config_file');

my_config_file.php 内,我有一系列define 语句来设置配置值:

define('GOOGLE_OAUTH_APPLICATION_NAME','My Application Name');
define('GOOGLE_OAUTH_CLIENT_ID','My App Client ID');
define('GOOGLE_OAUTH_CLIENT_SECRET','My App Client Secret');

我想在 google-api-php-client 库的配置中使用这些:

global $apiConfig;
$apiConfig = array(
    'application_name' => GOOGLE_OAUTH_APPLICATION_NAME,
    'oauth2_client_id' => GOOGLE_OAUTH_CLIENT_ID,
    'oauth2_client_secret' => GOOGLE_OAUTH_CLIENT_SECRET
);

在这样做(和一些调试)之后,我确定库的配置文件在自动加载的配置文件之前执行。我得到的错误进一步表明了这一点:

Notice: Use of undefined constant GOOGLE_OAUTH_APPLICATION_NAME ...
Notice: Use of undefined constant GOOGLE_OAUTH_CLIENT_ID ...
Notice: Use of undefined constant GOOGLE_OAUTH_CLIENT_SECRET ...

如何获取它以便在加载库配置之前定义这些全局配置常量(从而解决此问题)?

【问题讨论】:

  • 您没有使用标准的 codeigniter 配置文件有什么原因吗?如果您真的想为您的 google api 库提供一个专用的配置文件,我会直接从该库中包含它,而不是使用自动加载。

标签: php codeigniter google-api app-config


【解决方案1】:

最佳做法是为库创建单独的配置文件;说application/config/oauth.php

该配置文件使用$this->config->load('oauth'); 加载到库的构造函数中。当然,你也可以只将它包含在自动加载数组中。

然后在你的库中调用配置项:

$apiConfig = array(
    'application_name' => $this->config->item('google_oauth_application_name', 'oauth'),
    'oauth2_client_id' => $this->config->item('oauth2_client_id', 'oauth'),
    'oauth2_client_secret' => $this->config->item('oauth2_client_secret', 'oauth')
);

干杯。

【讨论】:

  • 这个问题是我想要整个应用程序的 1 个配置文件,以便设置它的新实例只需要更改 1 个文件(我们计划开源代码和应用程​​序,因此 oauth 信息可能会从一个实例更改为另一个实例)。这是一个普遍的坏主意吗?或者以一种不“hacky”的方式来做是否可行?
  • 您绝对可以拥有一个配置文件,但它应该存在于 CI 范围内——从长远来看,它会使事情变得更容易。如果可以的话,避免define-ing 的事情。如果您要发布应用程序,请留下敏感信息并使用占位符创建 config.sample.php
  • 所以我决定采用这个解决方案,但我还有一些问题。因为配置值在其他地方经常使用,所以我希望它们能够自动加载。我可以在 autoload.php 中很好地做到这一点。我遇到的问题是,我不希望它们成为庞大的 CI_Config 对象的一部分。我希望它们像运行$this->config->load('oauth', TRUE) 一样加载它们。这样我就可以使用一个钩子,并用这个配置文件中的值预设一个受保护的控制器变量控制器。在不破解核心文件的情况下这是否可行?如果可以,如何实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2019-05-08
相关资源
最近更新 更多