App 类

class Cake\Core\App

App 类负责资源定位和路径管理。

查找类

static Cake\Core\App::className($name, $type = '', $suffix = '')

此方法用于解析 CakePHP 中的类名。它解析 CakePHP 使用的简短形式名称,并返回完全解析的类名。

// Resolve a short class name with the namespace + suffix.
App::className('Flash', 'Controller/Component', 'Component');
// Returns Cake\Controller\Component\FlashComponent

// Resolve a plugin name.
App::className('DebugKit.Toolbar', 'Controller/Component', 'Component');
// Returns DebugKit\Controller\Component\ToolbarComponent

// Names with \ in them will be returned unaltered.
App::className('App\Cache\ComboCache');
// Returns App\Cache\ComboCache

解析类时,将尝试 App 命名空间,如果类不存在,将尝试 Cake 命名空间。如果两个类名都不存在,将返回 false

查找资源路径

static Cake\Core\App::path(string $package, ?string $plugin = null)

此方法返回使用 App.paths 应用配置设置的路径。

// Get the templates path set using ``App.paths.templates`` app config.
App::path('templates');

您也可以以相同的方式检索 localesplugins 的路径。

查找命名空间路径

static Cake\Core\App::classPath(string $package, ?string $plugin = null)

用于根据约定获取路径位置。

// Get the path to Controller/ in your application
App::classPath('Controller');

这可以针对应用程序中所有命名空间执行。

App::classPath() 将仅返回默认路径,并且无法提供有关自动加载程序配置的其他路径的任何信息。

static Cake\Core\App::core(string $package)

用于查找 CakePHP 中包的路径。

// Get the path to Cache engines.
App::core('Cache/Engine');

定位主题

由于主题是插件,因此您可以使用上述方法获取主题的路径。

加载供应商文件

理想情况下,供应商文件应该使用 Composer 自动加载,如果您有无法使用 Composer 自动加载或安装的供应商文件,则需要使用 require 加载它们。

如果您无法使用 Composer 安装库,最好将每个库安装在遵循 Composer 约定的目录中,即 vendor/$author/$package。如果您有一个名为 AcmeLib 的库,您可以将其安装到 vendor/Acme/AcmeLib。假设它未使用 PSR-0 兼容的类名,您可以使用应用程序 composer.json 中的 classmap 自动加载其中的类。

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "App\\Test\\": "tests/"
    },
    "classmap": [
        "vendor/Acme/AcmeLib"
    ]
}

如果您的供应商库未使用类,而是提供函数,您可以配置 Composer 使用 files 自动加载策略在每次请求开始时加载这些文件。

"autoload": {
    "psr-4": {
        "App\\": "src/",
        "App\\Test\\": "tests/"
    },
    "files": [
        "vendor/Acme/AcmeLib/functions.php"
    ]
}

配置完供应商库后,您需要使用以下命令重新生成应用程序的自动加载程序。

$ php composer.phar dump-autoload

如果您碰巧没有在应用程序中使用 Composer,则需要自己手动加载所有供应商库。