App 类负责资源定位和路径管理。
此方法用于解析 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
。
此方法返回使用 App.paths
应用配置设置的路径。
// Get the templates path set using ``App.paths.templates`` app config.
App::path('templates');
您也可以以相同的方式检索 locales
、plugins
的路径。
用于根据约定获取路径位置。
// Get the path to Controller/ in your application
App::classPath('Controller');
这可以针对应用程序中所有命名空间执行。
App::classPath()
将仅返回默认路径,并且无法提供有关自动加载程序配置的其他路径的任何信息。
用于查找 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,则需要自己手动加载所有供应商库。