自动加载文件
每个应用程序都包含许多位于不同位置的类。该框架提供了用于核心功能的类。您的应用程序将具有许多库,模型和其他实体,以使其正常运行。您可能有项目正在使用的第三方类。跟踪每个文件的位置,然后将该位置硬编码成一系列文件,这requires()
是一件非常麻烦的事情,而且容易出错。这就是自动装带器的用武之地。
CodeIgniter提供了非常灵活的自动加载器,只需很少的配置即可使用。它可以定位各个非命名空间的类,遵循PSR4自动加载目录结构的命名空间的类, 甚至可以尝试在通用目录(如Controllers,Models等)中定位类。
为了提高性能,核心CodeIgniter组件已添加到类映射中。
自动装带器本身可以很好地工作,但是如果需要,也可以与其他自动装带器(例如 Composer)一起使用,甚至可以与您自己的自定义自动装带器一起使用。因为它们都是通过spl_autoload_register注册的 ,所以它们按顺序工作,不会互相干扰。
自动加载器始终处于活动状态,并spl_autoload_register()
在框架执行开始时进行注册。
Configuration
初始配置在/application/Config/Autoload.php中完成。该文件包含两个主数组:一个用于类映射,一个用于PSR4兼容名称空间。
Namespaces
建议的组织类的方法是为应用程序的文件创建一个或多个命名空间。这对于任何与业务逻辑相关的类,实体类等都是最重要的。psr4
配置文件中的数组允许您将名称空间映射到可以在以下目录中找到这些类的目录:
$psr4 = [
'App' => APPPATH,
'CodeIgniter' => BASEPATH,
];
每行的键是名称空间本身。这不需要结尾的斜杠。如果使用双引号定义数组,请确保转义反斜杠。那就是事实My\App
并非如此MyApp
。该值是可在其中找到类的目录的位置。它们应带有斜杠。
默认情况下,应用程序文件夹是名称空间的App
名称空间。虽然您不必在应用程序目录中为控制器,库或模型设置名称空间,但是如果这样做,它们将在App
名称空间下找到。您可以通过编辑/application/Config/Constants.php文件并在以下APP_NAMESPACE
设置下设置新的名称空间值来更改此名称空间:
define('APP_NAMESPACE', 'App');
您将需要修改所有引用当前名称空间的现有文件。
重要
配置文件在名称空间中Config
命名,而不是AppConfig
您期望的那样。即使应用程序名称空间已更改,这也使核心系统文件始终能够找到它们。
Classmap
该类映射被CodeIgniter广泛使用,通过不通过额外的file_exists()
调用来访问文件系统,从而使系统获得最后的性能。您可以使用类映射链接到未命名空间的第三方库:
$classmap = [
'Markdown' => APPPATH .'third_party/markdown.php'
];
每行的键是您要查找的类的名称。该值是定位它的路径。
旧版支持
如果以上方法均未找到该类,并且该类未命名空间,则自动加载器将在 / application / Libraries和/ application / Models目录中查找以尝试查找文件。这提供了一种措施,有助于简化从先前版本的过渡。
没有用于旧版支持的配置选项。