自动加载
自动加载文件
每个应用程序都包含许多不同位置的大量课程。该框架提供了核心功能的类。您的应用程序将拥有多个库,模型和其他实体,以使其正常工作。您可能有项目正在使用的第三方类。跟踪每个单个文件的位置,并将该位置硬编码到一系列的require()文件中是一个非常大的头痛,非常容易出错。这就需要自动加载机制对文件进行加载。
YP提供了非常灵活的自动加载机,使用很少配置。它可以找到单个非命名空间类,遵循PSR4自动加载目录结构的命名空间类, 甚至尝试在通用目录(如Controllers,Models等)中查找类。
为了提高性能,YP将核心组件添加到类映射中。
自动加载机本身很好,但也可以与其他自动装载机(如Composer)一起工作 ,甚至可以使用自己的自定义自动加载机。因为它们都是通过spl_autoload_register进行注册的,所以它们按顺序工作,不会相互干扰。
自动加载器始终处于活动状态,并在框架执行开始时向spl_autoload_register()注册。
配置
默认配置在/app/Config/Autoload.php中完成。该文件包含两个主要数组:一个用于类映射,一个用于与PSR4兼容的命名空间。
命名空间
用于组织类的推荐方法是为应用程序的文件创建一个或多个命名空间。这是任何业务逻辑相关的类,实体类,等等。最重要的PSR4配置文件中的阵列允许您将命名空间映射到目录中的这些类中可以找到:
$namespaceMap = [
'Config' => APP_PATH . 'Config',
'Core' => APP_PATH . 'Core',
'Function' => APP_PATH . 'Function',
'App' => APP_PATH,
APP_NAMESPACE => APP_PATH,
];
每行的key是命名空间本身,这不需要尾部斜线。如果您使用双引号来定义数组,请确保避免向后斜杠。这意味着它将是我的\app,而不是我的\app。该值是可以找到类的目录的位置,它们应该有一个尾部斜杠。
默认情况下,应用程序文件夹是App命名空间的命名空间。虽然您不必强制命名空间应用程序目录中的控制器,库或模型(如果这样做),它们将在App命名空间下找到。您可以通过编辑/application/Config/Constants.php文件并在APP_NAMESPACE设置下设置新的命名空间值来更改此命名空间:
define ('APP_NAMESPACE' , 'App' );
您将需要修改引用当前命名空间的任何现有文件。
配置文件在Config命名空间中命名,而不是App\Config中的命名空间。这允许核心系统文件始终能够定位它们,即使app命名空间已更改。
类映射
该类映射被YP广泛使用,通过不使用额外的file_exists()性能调用命中文件系统,从系统中获取。您可以使用类映射链接到没有命名空间的第三方库:
$classmap = [
'Markdown' => APP_PATH .'ThirdParty/markdown.php'
];
每行的key是要查找的类的名称,value是找到它的路径。
如果上述两种方法都没有找到该类,并且该类没有命名空间,则自动加载机将在 /app/Libraries和/app/Models目录中查找以查找文件。不需要配置。