自动加载文件
每个应用程序都包含大量位于不同位置的类。框架提供了核心功能的类。您的应用程序将拥有许多库、模型和其他实体来使其正常工作。您可能还拥有项目正在使用的第三方类。跟踪每个文件的具体位置,并在文件中使用一系列 requires()
对其进行硬编码是一件非常头疼且容易出错的事情。这就是自动加载器发挥作用的地方。
CodeIgniter4 自动加载器
CodeIgniter 提供了一个非常灵活的自动加载器,它几乎不需要配置即可使用。它可以定位符合 PSR-4 自动加载目录结构的单个命名空间类。
自动加载器本身运行良好,但也可以与其他自动加载器一起使用,例如 Composer,甚至您自己的自定义自动加载器(如果需要)。由于它们都是通过 spl_autoload_register 注册的,因此它们按顺序工作,不会相互干扰。
自动加载器始终处于活动状态,在框架执行开始时使用 spl_autoload_register()
注册。
重要
您应该始终注意文件名的大小写。许多开发人员在 Windows 或 macOS 上的区分大小写的文件系统上进行开发。但是,大多数服务器环境使用区分大小写的文件系统。如果文件名大小写不正确,自动加载器将无法在服务器上找到该文件。
配置
初始配置在 app/Config/Autoload.php 中完成。该文件包含两个主要数组:一个用于类映射,另一个用于 PSR-4 兼容的命名空间。
命名空间
组织类文件的推荐方法是为应用程序文件创建一个或多个命名空间。这对于任何与业务逻辑相关的类、实体类等最为重要。配置文件中的 $psr4
数组允许您将命名空间映射到可以找到这些类的目录。
<?php
namespace Config;
use CodeIgniter\Config\AutoloadConfig;
class Autoload extends AutoloadConfig
{
// ...
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
];
// ...
}
每行的键是命名空间本身。这不需要尾随反斜杠。值是找到类的目录的位置。
确认命名空间
您可以通过 spark namespaces
命令检查命名空间配置。
php spark namespaces
应用程序命名空间
默认情况下,应用程序目录命名空间为 App
命名空间。您必须在应用程序目录中为控制器、库或模型命名空间,它们将在 App
命名空间下找到。
您可以通过编辑 **app/Config/Constants.php** 文件并在 APP_NAMESPACE
设置下设置新的命名空间值来更改此命名空间。
defined('APP_NAMESPACE') || define('APP_NAMESPACE', 'App');
您需要修改任何引用当前命名空间的现有文件。
重要
配置文件在 Config
命名空间中命名空间,而不是像您预期的那样在 App\Config
中。这允许核心系统文件始终能够找到它们,即使应用程序命名空间已更改。
类映射
类映射被 CodeIgniter 广泛使用,以通过避免使用额外的 is_file()
调用来访问文件系统,从而从系统中榨取最后一点性能。您可以使用类映射链接到未命名空间的第三方库。
<?php
namespace Config;
use CodeIgniter\Config\AutoloadConfig;
class Autoload extends AutoloadConfig
{
// ...
public $classmap = [
'Markdown' => APPPATH . 'ThirdParty/markdown.php',
];
// ...
}
每行的键是您要查找的类的名称。值是查找它的路径。
Composer 支持
Composer 支持默认情况下自动初始化。默认情况下,它在 ROOTPATH . 'vendor/autoload.php'
中查找 Composer 的自动加载文件。如果您需要出于任何原因更改该文件的路径,您可以修改在 **app/Config/Constants.php** 中定义的值。
注意
如果 CodeIgniter 和 Composer 中定义了相同的命名空间,CodeIgniter 的自动加载器将是第一个有机会找到该文件的人。