一、配置
虽然约定不再需要配置所有的CakePHP,但仍然需要配置一些东西,比如你的数据库凭据。
此外,还有可选的配置选项,允许您根据应用程序切换默认值和实现。
二、配置应用程序
配置通常存储在PHP或INI文件中,并在应用程序引导期间加载。 CakePHP默认提供一个配置文件,但如果需要,您可以添加其他配置文件并将其加载到应用程序的引导代码中。Cake\Core\Configure用于全局配置,类像Cache提供的config()方法使配置简单和透明。
三、加载其他配置文件
如果您的应用程序具有许多配置选项,将配置拆分为多个文件会很有帮助。 在config /目录中创建每个文件后,您可以在bootstrap.php中加载它们:
use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;
Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
Configure::load('other_config', 'default');
您还可以使用其他配置文件来提供特定于环境的覆盖。 在app.php之后加载的每个文件都可以重新定义先前声明的值,从而允许您为开发或暂存环境自定义配置。
四、一般配置
下面是变量的描述以及它们如何影响您的CakePHP应用程序。
1)调试
更改CakePHP调试输出。 false =Production mode。 未显示任何错误消息,错误或警告。 true =显示错误和警告。
2)App.namespace
在下面找到应用程序类的命名空间。
▲ 注意:当更改配置中的命名空间时,您还需要更新composer.json文件以使用此命名空间。 此外,通过运行php composer.phar dumpautoload创建一个新的自动php composer.phar dumpautoload 。
3)App.baseUrl
如果您不打算对CakePHP使用Apache的mod_rewrite,请取消注释此定义。 不要忘记删除您的.htaccess文件。
4)App.base
应用程序驻留的基本目录。如果为false ,将自动检测。 如果不是false ,请确保您的字符串以/开头,不以/结尾。 例如, / basedir是一个有效的App.base。 否则,AuthComponent将无法正常工作。
5)App.encoding
定义应用程序使用的编码。 此编码用于在布局中生成字符集,并对实体进行编码。 它应该与为数据库指定的编码值匹配。
6)App.webroot
webroot目录。
7)App.wwwRoot
webroot的文件路径。
8)App.fullBaseUrl
应用程序根目录的完全限定域名(包括协议)。 这在生成绝对URL时使用。 默认情况下,此值使用$ _SERVER环境生成。 但是,您应该手动定义它以优化性能,或者如果您担心人们操纵Host头。 在CLI上下文(来自shells)中, fullBaseUrl无法从$ _SERVER读取,因为没有涉及Web服务器。 你需要自己指定,如果你需要从shell生成URL(例如,当发送电子邮件)。
9)App.imageBaseUrl
web路径到webroot下的public图像目录。 如果您使用CDN ,应将此值设置为CDN的位置。
10)App.cssBaseUrl
web路径到webroot下的公共css目录。 如果您使用CDN ,应将此值设置为CDN的位置。
11)App.jsBaseUrl
web路径到webroot下的public js目录。 如果您使用CDN ,应将此值设置为CDN的位置。
12)App.paths
为非基于资源的资源配置路径。 支持plugins , templates , locales子项,它们允许分别定义插件,视图模板和语言环境文件的路径。
13)安全
在哈希中使用的随机字符串。 此值还在进行对称加密时用作HMAC盐。
14)Asset.timestamp
在使用正确的帮助程序时,在资源文件网址(CSS,JavaScript,图片)的末尾追加特定文件的上次修改时间的时间戳。 有效值:
(bool) false - 不做任何事情(默认)
(bool) true - 当debug为true时附加时间戳
(string)'force' - 始终追加时间戳。
五、数据库配置
有关配置数据库连接的信息 ,请参阅数据库配置。
六、缓存配置
有关在CakePHP中配置缓存的信息,请参阅缓存配置 。
七、错误和异常处理配置
有关配置错误和异常处理程序的信息,请参阅错误和异常配置 。
八、日志配置
有关在CakePHP中配置日志记录的信息,请参阅日志配置 。
九、电子邮件配置
有关在CakePHP中配置电子邮件预设的信息,请参阅电子邮件配置 。
十、会话配置
有关在CakePHP中配置会话处理的信息,请参阅会话配置 。
十一、路由配置
有关配置路由和为应用程序创建路由的更多信息,请参阅路由配置。
十二、附加类路径
通过应用程序使用的自动加载器设置其他类路径。 使用Composer生成自动加载器时,您可以执行以下操作,为应用程序中的控制器提供回退路径:
: {
: {
\\Controller\\: ,
\: src
}
}
上面将为
App
和App\Controller
命名空间设置路径。
将搜索第一个键,如果该路径不包含类/文件,则将搜索第二个键。
您还可以将单个命名空间映射到多个目录,具体如下:
: {
: {
\: [src/path/to/directory
}
}
十三、插件,视图模板和区域路径
由于插件,视图模板和语言环境不是类,因此它们不能配置自动装载器。 CakePHP提供了三个配置变量来为这些资源设置其他路径。 在你的config / app.php中,你可以设置这些变量:
return [
// More configuration
'App' => [
'paths' => [
'plugins' => [
ROOT . DS . 'plugins' . DS,
'/path/to/other/plugins/'
],
'templates' => [
APP . 'Template' . DS,
APP . 'Template2' . DS
],
'locales' => [
APP . 'Locale' . DS
]
]
]
];
路径应以目录分隔符结尾,否则它们将无法正常工作。
十四、变更配置
有关详细信息,请参阅“变更配置”文档。
十五、配置类
class Cake\Core\ Configure
CakePHP的Configure类可用于存储和检索应用程序或运行时特定值。 注意,这个类允许你存储任何东西,然后在代码的任何其他部分使用它:一个肯定的诱惑,打破了CakePHP的MVC模式。 Configure类的主要目标是保持可以在许多对象之间共享的集中变量。 记住尝试通过“惯例超过配置”生存,你不会结束我们已经设置的MVC结构。
您可以从应用程序的任何位置访问配置:
Configure::read('debug');
十六、写配置数据
static Cake\Core\Configure:: write ( $ key , $ value )
使用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)
在调试和生产模式之间切换。
这对于JSON交互特别方便,因为调试信息可能导致解析问题。
十七、读取配置数据
static Cake\Core\Configure:: read ( $ key = null )
用于从应用程序读取配置数据。 默认为CakePHP的重要调试值。 如果提供了密钥,则返回数据。 使用我们的write()例子,我们可以读回数据:
Configure::read('Company.name'); // Yields: 'Pizza, Inc.'
Configure::read('Company.slogan'); // Yields: 'Pizza for your body
// and soul'
Configure::read('Company');
// Yields:
['name' => 'Pizza, Inc.', 'slogan' => 'Pizza for your body and soul'];
如果$ key为null,将返回Configure中的所有值。
static Cake\Core\Configure:: readOrFail ( $ key )
读取配置数据就像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'];
十八、检查配置数据是否已定义
static Cake\Core\Configure:: check ( $ key )
用于检查键/路径是否存在并具有非空值:
$ exists = Configure :: check ( 'Company.name' );
static Cake\Core\Configure:: delete ( $ key )
用于从应用程序的配置中删除信息:
Configure :: delete ( 'Company.name' );
二十、读取和删除配置数据
static Cake\Core\Configure:: consume ( $ key )
从配置中读取和删除密钥。 当您想在单个操作中组合读取和删除值时,这是非常有用的。
二十一、读取和写入配置文件
static Cake\Core\Configure:: config ( $ name , $ engine )
CakePHP带有两个内置的配置文件引擎。Cake\Core\Configure\Engine\PhpConfig能够读取配置历史上读取的相同格式的PHP配置文件。 Cake\Core\Configure\Engine\IniConfig能够读取ini配置文件。 有关ini文件的详细信息,请参阅PHP文档。 要使用核心配置引擎,您需要使用Configure::config()将其附加到Configure::config() :
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::configured()
:
// Get the array of aliases for attached engines.
Configure::configured();
// Check if a specific engine is attached
Configure::configured('default');
-
static
Cake\Core\Configure::
drop
( $ name )
您也可以删除连接的引擎。 Configure::drop('default')
将删除默认引擎别名。 以后尝试加载配置文件时,该引擎将失败:
Configure::drop('default');
二十二、加载配置文件
-
静态
Cake\Core\Configure::
load
( $ key , $ config ='default' , $ merge = true )
将配置引擎附加到配置后可以加载配置文件:
// Load my_file.php using the 'default' engine object.
Configure::load('my_file', 'default');
加载的配置文件将其数据与“配置”中的现有运行时配置进行合并。 这允许您覆盖现有运行时配置并将新值添加到现有运行时配置中。 通过将
$merge
设置$merge
true
,值将不会覆盖现有配置。
二十三、创建或修改配置文件
-
static
Cake\Core\Configure::
dump
( $ key , $ config ='default' , $ keys = [] )
假设“默认”引擎是PhpConfig的一个实例。 将所有数据保存到配置文件my_config.php :
Configure::dump('my_config', 'default');
仅保存错误处理配置:
Configure::dump('error', 'default', ['Error', 'Exception']);
Configure::dump()可以用于修改或覆盖可以通过 Configure::load()读取的配置文件
二十四、存储运行时配置
-
static
Cake\Core\Configure::
store
( $ name , $ cacheConfig ='default' , $ data = null )
您还可以存储运行时配置值,以在将来的请求中使用。 由于configure仅记住当前请求的值,因此如果要在后续请求中使用它,您将需要存储任何已修改的配置信息:
// Store the current configuration in the 'user_1234' key in the 'default' cache.
Configure::store('user_1234', 'default');
存储的配置数据将保留在命名的高速缓存配置中。 有关缓存的更多信息,请参阅缓存文档。
二十五、恢复运行时配置
-
static
Cake\Core\Configure::
restore
( $ name , $ cacheConfig ='default' )
一旦存储了运行时配置,您可能需要恢复它,以便您可以再次访问它。 Configure::restore()
正是这样:
// Restore runtime configuration from the cache.
Configure::restore('user_1234', 'default');
当恢复配置信息时,使用相同的密钥和缓存配置来恢复配置信息很重要,就像用于存储配置信息一样。 已恢复的信息合并到现有运行时配置之上。
二十六、创建自己的配置引擎
由于配置引擎是CakePHP的可扩展部分,因此您可以在应用程序和插件中创建配置引擎。 配置引擎需要实现Cake\Core\Configure\ConfigEngineInterface
。 此接口定义一个读取方法,作为唯一必需的方法。 如果你喜欢XML文件,你可以为你的应用程序创建一个简单的Xml配置引擎:
// In src/Configure/Engine/XmlConfig.php
namespace App\Configure\Engine;
use Cake\Core\Configure\ConfigEngineInterface;
use Cake\Utility\Xml;
class XmlConfig implements ConfigEngineInterface
{
public function __construct($path = null)
{
if (!$path) {
$path = CONFIG;
}
$this->_path = $path;
}
public function read($key)
{
$xml = Xml::build($this->_path . $key . '.xml');
return Xml::toArray($xml);
}
public function dump($key, array $data)
{
// Code to dump data to file
}
}
在你的config / bootstrap.php你可以附加这个引擎,并使用它:
use App\Configure\Engine\XmlConfig;
Configure::config('xml', new XmlConfig());
...
Configure::load('my_xml', 'xml');
配置引擎的read()
方法必须返回名为$key
的资源所包含的配置信息的数组。
-
接口
-
定义读取配置数据并将其存储在配置中的类使用的
Configure
Cake\Core\Configure\
ConfigEngineInterface
-
参数: - $ key ( string ) - 要加载的密钥名称或标识符。
此方法应加载/解析由
$key
标识的配置数据,并在文件中返回数据数组。
Cake\Core\Configure\ConfigEngineInterface::
read
( $ key )
-
参数: - $ key ( string ) - 要写入的标识符。
- $ data ( array ) - 要转储的数据。
- 此方法应将提供的配置数据转储/存储到由
$key
标识的$key
。
Cake\Core\Configure\ConfigEngineInterface::
dump
( $ key )
二十七、内置配置引擎
PHP配置文件
-
class
Cake\Core\Configure\Engine\
PhpConfig
允许您读取作为纯PHP文件存储的配置文件。 您可以使用插件语法从应用程序的配置或插件configs目录中读取任何文件。 文件必须返回一个数组。 示例配置文件如下所示:
return [
'debug' => 0,
'Security' => [
'salt' => 'its-secret'
],
'App' => [
'namespace' => 'App'
]
];
通过在config / bootstrap.php中插入以下代码来加载自定义配置文件:
Configure::load('customConfig');
Ini配置文件
-
类
Cake\Core\Configure\Engine\
IniConfig
允许您读取作为纯.ini文件存储的配置文件。 ini文件必须与php的parse_ini_file()
函数parse_ini_file()
,并受益于以下改进
- 点分隔值展开为数组。
- boolean-ish值如'on'和'off'被转换为布尔值。
一个示例ini文件将如下所示:
debug = 0
[Security]
salt = its-secret
[App]
namespace = App
上述ini文件将导致与上面的PHP示例相同的结束配置数据。 可以通过点分隔值或节创建数组结构。 节可以包含点分隔键,用于更深的嵌套。
Json配置文件
-
class
Cake\Core\Configure\Engine\
JsonConfig
允许读取/转储在.json文件中作为JSON编码字符串存储的配置文件。
示例JSON文件如下所示:
{
: false,
: {
:
},
: {
:
}
}
Bootstrapping CakePHP
如果您有任何其他配置需要,您应该将它们添加到应用程序的config / bootstrap.php文件。 此文件包含在每个请求和CLI命令之前。
此文件是许多常见引导任务的理想选择:
- 定义方便功能。
- 声明常量。
- 定义缓存配置。
- 定义日志记录配置。
- 加载自定义字幕。
- 加载配置文件。
它可能是诱人的格式化功能,以便在控制器中使用它们。 正如你将在控制器和视图部分看到的,有更好的方法添加自定义逻辑到你的应用程序。
Application :: bootstrap()
除了应该用于配置应用程序的低级关注的config / bootstrap.php文件之外,还可以使用Application::bootstrap()
挂钩方法加载/初始化插件,并附加全局事件侦听器:
// in src/Application.php
namespace App;
use Cake\Core\Plugin;
use Cake\Http\BaseApplication;
class Application extends BaseApplication
{
public function bootstrap()
{
// Call the parent to `require_once` config/bootstrap.php
parent::bootstrap();
Plugin::load('MyPlugin', ['bootstrap' => true, 'routes' => true]);
}
}
在
Application::bootstrap()
中加载插件/事件使得控制器集成测试更容易,因为事件和路由将在每个测试方法上重新处理。
环境变量
一些现代云提供商,如Heroku,让您定义环境变量。 通过定义环境变量,您可以将CakePHP应用程序配置为12因子应用程序。 遵循12 因素应用程序说明是创建无状态应用程序和简化应用程序部署的好方法。 这意味着,例如,如果您需要更改数据库,则只需要修改主机配置上的DATABASE_URL变量,而无需在源代码中进行更改。
正如你可以在你的app.php中看到的,以下变量是:
DEBUG
(0
or1
)APP_ENCODING
(ie UTF-8)APP_DEFAULT_LOCALE
(ieen_US
)SECURITY_SALT
CACHE_DEFAULT_URL
(ieFile:///?prefix=myapp_&serialize=true&timeout=3600&path=../tmp/cache/
)CACHE_CAKECORE_URL
(ieFile:///?prefix=myapp_cake_core_&serialize=true&timeout=3600&path=../tmp/cache/persistent/
)CACHE_CAKEMODEL_URL
(ieFile:///?prefix=myapp_cake_model_&serialize=true&timeout=3600&path=../tmp/cache/models/
)EMAIL_TRANSPORT_DEFAULT_URL
(iesmtp://user:password@hostname:port?tls=null&client=null&timeout=30
)DATABASE_URL
(iemysql://user:pass@db/my_app
)DATABASE_TEST_URL
(iemysql://user:pass@db/test_my_app
)LOG_DEBUG_URL
(iefile:///?levels[]=notice&levels[]=info&levels[]=debug&file=debug&path=../logs/
)LOG_ERROR_URL
(iefile:///?levels[]=warning&levels[]=error&levels[]=critical&levels[]=alert&levels[]=emergency&file=error&path=../logs/
)
如果环境变量没有在您的环境中定义,CakePHP将使用在app.php中定义的值。 您可以使用php-dotenv库在本地开发中使用环境变量。 有关详细信息,请参阅库的自述手册。