Application
是你应用程序的核心。它控制应用程序的配置方式,以及包含哪些插件、中间件、控制台命令和路由。
你可以在 src/Application.php 中找到你的 Application
类。默认情况下它将非常精简,只定义几个默认的 中间件。应用程序可以定义以下钩子方法
bootstrap
用于加载 配置文件、定义常量和其他全局函数。默认情况下这将包含 config/bootstrap.php。这是加载 插件 和全局 事件监听器 的理想位置。
routes
用于加载 路由。默认情况下这将包含 config/routes.php。
middleware
用于将 中间件 添加到你的应用程序。
console
用于将 控制台命令 添加到你的应用程序。默认情况下这将自动发现应用程序及其所有插件中的控制台命令。
如果你有任何额外的配置需求,你应该将它们添加到你的应用程序的 config/bootstrap.php 文件中。此文件在每次请求和 CLI 命令之前都会被包含。
此文件非常适合许多常见的引导任务
定义便利函数。
声明常量。
定义缓存配置。
定义日志记录配置。
加载自定义变形。
加载配置文件。
你可能很想在那里放置格式化函数以便在你的控制器中使用它们。正如你将在 控制器 和 视图 部分看到的那样,你可以使用更好的方式将自定义逻辑添加到你的应用程序。
除了应该用于配置应用程序底层问题的 config/bootstrap.php 文件之外,你还可以使用 Application::bootstrap()
钩子方法来加载/初始化插件,并附加全局事件监听器
// in src/Application.php
namespace App;
use Cake\Http\BaseApplication;
class Application extends BaseApplication
{
public function bootstrap()
{
// Call the parent to `require_once` config/bootstrap.php
parent::bootstrap();
// CakePHP has the ability to fallback to using the `Cake\ORM\Table`
// class to represent your database tables when a related class is
// not created for that table. But using this "auto-tables" feature
// can make debugging more difficult in some scenarios. So we disable
// this feature except for the CLI environment (since the classes
// would not be present when using the `bake` code generation tool).
if (PHP_SAPI !== 'cli') {
FactoryLocator::add(
'Table',
(new TableLocator())->allowFallbackClass(false)
);
}
// Load MyPlugin
$this->addPlugin('MyPlugin');
}
}
在 Application::bootstrap()
中加载插件和事件可以使 控制器集成测试 变得更容易,因为事件和路由将在每个测试方法上重新处理。