Application

Application 是你应用程序的核心。它控制应用程序的配置方式,以及包含哪些插件、中间件、控制台命令和路由。

你可以在 src/Application.php 中找到你的 Application 类。默认情况下它将非常精简,只定义几个默认的 中间件。应用程序可以定义以下钩子方法

  • bootstrap 用于加载 配置文件、定义常量和其他全局函数。默认情况下这将包含 config/bootstrap.php。这是加载 插件 和全局 事件监听器 的理想位置。

  • routes 用于加载 路由。默认情况下这将包含 config/routes.php

  • middleware 用于将 中间件 添加到你的应用程序。

  • console 用于将 控制台命令 添加到你的应用程序。默认情况下这将自动发现应用程序及其所有插件中的控制台命令。

引导你的应用程序

如果你有任何额外的配置需求,你应该将它们添加到你的应用程序的 config/bootstrap.php 文件中。此文件在每次请求和 CLI 命令之前都会被包含。

此文件非常适合许多常见的引导任务

  • 定义便利函数。

  • 声明常量。

  • 定义缓存配置。

  • 定义日志记录配置。

  • 加载自定义变形。

  • 加载配置文件。

你可能很想在那里放置格式化函数以便在你的控制器中使用它们。正如你将在 控制器视图 部分看到的那样,你可以使用更好的方式将自定义逻辑添加到你的应用程序。

Application::bootstrap()

除了应该用于配置应用程序底层问题的 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() 中加载插件和事件可以使 控制器集成测试 变得更容易,因为事件和路由将在每个测试方法上重新处理。