虽然约定消除了配置所有 CakePHP 的需要,但您仍然需要配置一些内容,例如您的数据库凭据。
此外,还有一些可选的配置选项,允许您用适合您应用程序的选项替换默认值和实现。
配置通常存储在 PHP 或 INI 文件中,并在应用程序启动时加载。CakePHP 默认情况下带有一个配置文件,但如果需要,您可以在应用程序的引导代码中添加其他配置文件并加载它们。 Cake\Core\Configure
用于全局配置,并且像 Cache
这样的类提供 setConfig()
方法以使配置简单透明。
应用程序框架包含一个 config/app.php 文件,其中应包含在应用程序部署的不同环境中不改变的配置。config/app_local.php 文件应包含在不同环境之间变化的配置数据,应由配置管理或您的部署工具管理。这两个文件都通过 env()
函数引用环境变量,该函数使配置值可以通过服务器环境设置。
如果您的应用程序有许多配置选项,将配置拆分为多个文件可能会有所帮助。在 config/ 目录中创建每个文件后,您可以在 bootstrap.php 中加载它们。
use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;
Configure::setConfig('default', new PhpConfig());
Configure::load('app', 'default', false);
Configure::load('other_config', 'default');
许多现代云提供商(如 Heroku)允许您为配置数据定义环境变量。您可以通过环境变量在 12 因子应用程序风格 中配置您的 CakePHP。环境变量使您的应用程序能够减少对状态的依赖,从而使您的应用程序在跨多个环境部署时更容易管理。
正如您在 app.php 中看到的,env()
函数用于从环境中读取配置并构建应用程序配置。CakePHP 使用 DSN 字符串用于数据库、日志、电子邮件传输和缓存配置,使您能够轻松地在每个环境中改变这些库。
对于本地开发,CakePHP 利用 dotenv 使本地开发自动重新加载环境变量。使用 composer 要求此库,然后在 bootstrap.php
中有一块代码需要取消注释才能利用它。
您将在您的应用程序中看到一个 config/.env.example
。通过将此文件复制到 config/.env
并自定义值,您可以配置您的应用程序。
您应该避免将 config/.env
文件提交到您的存储库,而是使用 config/.env.example
作为包含占位符值的模板,以便您团队中的每个人都知道正在使用哪些环境变量以及每个变量应该包含什么内容。
设置好环境变量后,您可以使用 env()
从环境中读取数据。
$debug = env('APP_DEBUG', false);
传递给 env 函数的第二个值是默认值。如果不存在给定键的环境变量,则将使用此值。
以下是变量的描述以及它们如何影响您的 CakePHP 应用程序。
更改 CakePHP 调试输出。false
= 生产模式。不显示错误消息、错误或警告。true
= 显示错误和警告。
在其中查找应用程序类的命名空间。
注意
更改配置中的命名空间后,您还需要更新您的 composer.json 文件以使用此命名空间。此外,通过运行 php composer.phar dumpautoload
创建一个新的自动加载器。
如果您不打算将 Apache 的 mod_rewrite 与 CakePHP 一起使用,请取消注释此定义。也不要忘记删除您的 .htaccess 文件。
应用程序所在的基目录。如果为 false
,则将自动检测。如果不是 false
,请确保您的字符串以 / 开头,并且不以 / 结尾。例如,/basedir 是一个有效的 App.base。
定义您的应用程序使用的编码。此编码用于在布局中生成字符集,以及对实体进行编码。它应该与为数据库指定的编码值匹配。
webroot 目录。
webroot 的文件路径。
应用程序根目录的完全限定域名(包括协议)。这在生成绝对 URL 时使用。默认情况下,此值使用 $_SERVER
环境生成。但是,您应该手动定义它以优化性能,或者如果您担心有人操纵 Host
标头。在 CLI 上下文(从命令)中,无法从 $_SERVER 读取 fullBaseUrl,因为没有涉及 Web 服务器。如果您确实需要从 shell 生成 URL(例如,在发送电子邮件时),您确实需要自己指定它。
webroot 下公用图像目录的 Web 路径。如果您使用的是 CDN,则应将此值设置为 CDN 的位置。
webroot 下公用 css 目录的 Web 路径。如果您使用的是 CDN,则应将此值设置为 CDN 的位置。
webroot 下公用 js 目录的 Web 路径。如果您使用的是 CDN,则应将此值设置为 CDN 的位置。
为非类资源配置路径。支持 plugins
、templates
、locales
子键,它们分别允许定义插件、视图模板和区域设置文件的路径。
定义上传的文件是作为对象 (true
) 还是数组 (false
) 表示。默认情况下,此选项被视为已启用。有关更多信息,请参见“请求和响应对象”一章中的 文件上传部分。
哈希中使用的随机字符串。此值也用作对称加密时进行 HMAC 盐。.
使用适当的助手时,将时间戳(即特定文件的最后修改时间)附加到资产文件 URL(CSS、JavaScript、图像)的末尾。有效值
(bool) false
- 不执行任何操作(默认值)
(bool) true
- 当 debug 为 true
时附加时间戳
(string) ‘force’ - 始终附加时间戳。
设置资源缓存时间。这决定了 http 头部 Cache-Control
的 max-age
,以及 http 头部 Expire
的时间,用于资源。它可以接受 PHP 版本的 strtotime 函数 可接受的任何内容。默认值为 +1 day
。
要使用 CDN 加载静态资源,请将 App.imageBaseUrl
、App.cssBaseUrl
、App.jsBaseUrl
更改为指向 CDN URI,例如:https://mycdn.example.com/
(注意结尾的 /
)。
通过 HtmlHelper 加载的所有图片、脚本和样式都将在绝对 CDN 路径之前加上前缀,匹配应用程序中使用的相同相对路径。请注意,在使用基于插件的资源时,存在一个特定的用例:当使用绝对 ...BaseUrl
URI 时,插件将不会使用插件的前缀,例如,默认情况下
$this->Helper->assetUrl('TestPlugin.logo.png')
解析为 test_plugin/logo.png
如果您将 App.imageBaseUrl
设置为 https://mycdn.example.com/
$this->Helper->assetUrl('TestPlugin.logo.png')
解析为 https://mycdn.example.com/logo.png
。
有关配置数据库连接的信息,请参阅 数据库配置。
有关在 CakePHP 中配置缓存的信息,请参阅 缓存配置。
有关配置错误和异常处理程序的信息,请参阅 错误和异常配置。
有关在 CakePHP 中配置日志记录的信息,请参阅 日志记录配置。
有关在 CakePHP 中配置电子邮件预设的信息,请参阅 电子邮件配置。
有关在 CakePHP 中配置会话处理的信息,请参阅 会话配置。
有关配置路由和为您的应用程序创建路由的更多信息,请参阅 路由配置。
其他类路径通过您的应用程序使用的自动加载器进行设置。当使用 composer
生成自动加载器时,您可以执行以下操作,为应用程序中的控制器提供回退路径
"autoload": {
"psr-4": {
"App\\Controller\\": "/path/to/directory/with/controller/folders/",
"App\\": "src/"
}
}
上面将为 App
和 App\Controller
命名空间设置路径。将搜索第一个键,如果该路径不包含该类/文件,则将搜索第二个键。您还可以使用以下方法将单个命名空间映射到多个目录
"autoload": {
"psr-4": {
"App\\": ["src/", "/path/to/directory/"]
}
}
由于插件、视图模板和语言环境不是类,因此无法为它们配置自动加载器。CakePHP 提供三个 Configure 变量来为这些资源设置其他路径。在您的 config/app.php 中,您可以设置这些变量
return [
// More configuration
'App' => [
'paths' => [
'plugins' => [
ROOT . DS . 'plugins' . DS,
'/path/to/other/plugins/',
],
'templates' => [
ROOT . DS . 'templates' . DS,
ROOT . DS . 'templates2' . DS,
],
'locales' => [
ROOT . DS . 'resources' . DS . 'locales' . DS,
],
],
],
];
路径应以目录分隔符结尾,否则将无法正常工作。
有关更多信息,请参阅 词形变化配置 文档。
CakePHP 的 Configure 类可用于存储和检索应用程序或运行时特定的值。请小心,此类允许您在其中存储任何内容,然后在代码的任何其他部分使用它:这无疑会破坏 CakePHP 设计的 MVC 模式。Configure 类的主要目标是保留可在多个对象之间共享的集中式变量。请记住,尝试遵循“约定优于配置”的原则,这样您就不会最终破坏 CakePHP 提供的 MVC 结构。
使用 write()
将数据存储在应用程序的配置中
Configure::write('Company.name', 'Pizza, Inc.');
Configure::write('Company.slogan', 'Pizza for your body and soul');
注意
在 $key
参数中使用的 点表示法 可用于将配置设置组织成逻辑组。
上面的示例也可以通过单个调用来完成
Configure::write('Company', [
'name' => 'Pizza, Inc.',
'slogan' => 'Pizza for your body and soul'
]);
您可以使用 Configure::write('debug', $bool)
在调试和生产模式之间动态切换。
注意
使用 Configure::write()
完成的任何配置更改都存储在内存中,并且不会跨请求持久化。
用于从应用程序中读取配置数据。如果提供了键,则返回数据。使用我们从 write() 中的示例,我们可以读回这些数据
// Returns 'Pizza Inc.'
Configure::read('Company.name');
// Returns 'Pizza for your body and soul'
Configure::read('Company.slogan');
Configure::read('Company');
// Returns:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];
// Returns 'fallback' as Company.nope is undefined.
Configure::read('Company.nope', 'fallback');
如果 $key
保持为 null,则将返回 Configure 中的所有值。
读取配置数据,就像 Cake\Core\Configure::read()
一样,但期望找到键值对。如果请求的对不存在,则会抛出 RuntimeException
Configure::readOrFail('Company.name'); // Yields: 'Pizza, Inc.'
Configure::readOrFail('Company.geolocation'); // Will throw an exception
Configure::readOrFail('Company');
// Yields:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];
用于检查键/路径是否存在且具有非 null 值
$exists = Configure::check('Company.name');
用于从应用程序的配置中删除信息
Configure::delete('Company.name');
从 Configure 中读取并删除一个键。这在您希望在一个操作中结合读取和删除值时很有用。
消耗配置数据,就像 Cake\Core\Configure::consume()
一样,但期望找到键值对。如果请求的对不存在,则会抛出 RuntimeException
Configure::consumeOrFail('Company.name'); // Yields: 'Pizza, Inc.'
Configure::consumeOrFail('Company.geolocation'); // Will throw an exception
Configure::consumeOrFail('Company');
// Yields:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];
CakePHP 附带了两个内置的配置文件引擎。 Cake\Core\Configure\Engine\PhpConfig
能够读取 PHP 配置文件,格式与 Configure 历史上读取的格式相同。 Cake\Core\Configure\Engine\IniConfig
能够读取 ini 配置文件。有关 ini 文件的详细信息,请参阅 PHP 文档。要使用核心配置引擎,您需要使用 Configure::config()
将其附加到 Configure
use Cake\Core\Configure\Engine\PhpConfig;
// Read config files from config
Configure::config('default', new PhpConfig());
// Read config files from another path.
Configure::config('default', new PhpConfig('/path/to/your/config/files/'));
您可以将多个引擎附加到 Configure,每个引擎读取不同类型或来源的配置文件。您可以使用 Configure 上的其他方法与附加的引擎交互。要检查已附加的引擎别名,可以使用 Configure::configured()
// Get the array of aliases for attached engines.
Configure::configured();
// Check if a specific engine is attached
Configure::configured('default');
您还可以删除附加的引擎。 Configure::drop('default')
将删除默认引擎别名。将来尝试使用该引擎加载配置文件将失败。
Configure::drop('default');
将配置引擎附加到 Configure 后,您可以加载配置文件。
// Load my_file.php using the 'default' engine object.
Configure::load('my_file', 'default');
加载的配置文件将它们的数据与 Configure 中的现有运行时配置合并。这允许您覆盖并将新值添加到现有的运行时配置中。通过将 $merge
设置为 true
,值永远不会覆盖现有配置。
警告
当使用 $merge = true 合并配置文件时,键中的点表示法不会扩展。
// config1.php
'Key1' => [
'Key2' => [
'Key3' => ['NestedKey1' => 'Value'],
],
],
// config2.php
'Key1.Key2' => [
'Key3' => ['NestedKey2' => 'Value2'],
]
Configure::load('config1', 'default');
Configure::load('config2', 'default', true);
// Now Key1.Key2.Key3 has the value ['NestedKey2' => 'Value2']
// instead of ['NestedKey1' => 'Value', 'NestedKey2' => 'Value2']
将 Configure 中的所有或部分数据转储到配置文件引擎支持的文件或存储系统中。序列化格式由作为 $config 附加的配置引擎决定。例如,如果“default”引擎是 Cake\Core\Configure\Engine\PhpConfig
,则生成的将是可由 Cake\Core\Configure\Engine\PhpConfig
加载的 PHP 配置文件。
假设“default”引擎是 PhpConfig 的实例。将 Configure 中的所有数据保存到 my_config.php 文件中。
Configure::dump('my_config', 'default');
仅保存错误处理配置。
Configure::dump('error', 'default', ['Error', 'Exception']);
Configure::dump()
可用于修改或覆盖使用 Configure::load()
可读的配置文件。
您还可以存储运行时配置值以便在将来的请求中使用。由于 Configure 仅记住当前请求的值,因此如果要在后续请求中使用任何修改的配置信息,则需要存储这些信息。
// Store the current configuration in the 'user_1234' key in the 'default' cache.
Configure::store('user_1234', 'default');
存储的配置数据会保留在命名的缓存配置中。有关缓存的更多信息,请参阅 Caching 文档。
存储运行时配置后,您可能需要恢复它才能再次访问它。 Configure::restore()
就是为此目的。
// Restore runtime configuration from the cache.
Configure::restore('user_1234', 'default');
恢复配置信息时,重要的是使用与存储时相同的键和缓存配置进行恢复。恢复的信息会合并到现有的运行时配置之上。
CakePHP 提供了从多个不同来源加载配置文件的功能,并提供了一个可插拔系统用于 创建您自己的配置引擎。内置配置引擎包括
默认情况下,您的应用程序将使用 PhpConfig
。