当前位置:  开发笔记 > 编程语言 > 正文

每次添加新类时都需要转储自动加载

如何解决《每次添加新类时都需要转储自动加载》经验,为你挑选了1个好方法。

每次添加新类时,我都需要转储自动加载器.我正在使用psr-4.我真的不知道为什么我需要这样做.在psr-4中,它应该自动加载类.我哪里错了?

这是我的composer.json文件

{"autoload": {"psr-4": {"MyDomain\\": "app"}}}

这是我的目录结构:

在此输入图像描述

这是我的一个类的代码:


axiac.. 14

PSR-4(以及PSR-0)要求将类ClassName存储在名为的文件中ClassName.php.名称区分大小写,并且必须完全匹配.

项目中的文件名是小写的,类名是大小写混合的.Windows和macOS上的默认磁盘格式在搜索时不区分大小写.这意味着当程序搜索Employee.php并且文件employee.php存在于目录中时,搜索成功并且OS返回现有文件,即使其名称的情况与所需文件的情况不同.在基于Linux的操作系统上,默认磁盘格式区分大小写,并且搜索的程序Employee.php无法找到employee.php.

您的composer.json文件将该app/目录声明为MyDomain遵循PSR-4标准的命名空间的根目录.这足以让自动加载器app/Models/Employee.php在需要加载类时找到该文件MyDomain\Models\Employee.

因为你在Ubuntu(这是一个基于Linux的操作系统)上运行它,PHP无法加载Employee.php文件(因为它不存在),操作系统不提供文件employee.php.

您似乎使用composer update -o或生成自动加载器composer dump-autoload -o.在-o(短--classmap-authoritative)告诉作曲家扫描中声明的目录composer.json(app/)在你的情况,并创建一个包含所有可以找到的类一类映射.classmap是一个列表,它将类名(带有命名空间)映射到文件名(带有目录).这样,自动加载器就可以确切地知道每个类的位置,并且加载速度更快.

以上两段解释了添加新类后需要重新生成自动加载器的原因.

正确的工作方式是遵循PSR-4要求.更具体地说,每个名称空间MyDomain必须存储在app/具有相同名称的子目录中,包括大小写.每个类必须存储在正确的子目录中,存储在与类(包括大小写)和终止.php(小写)同名的文件中.例如,类MyDomain\Models\Employee必须保留在文件中app/Models/Employee.php.

修复文件名后,您可以运行composer dump-autoload并忘记它.只要类和文件名遵循PSR-4,自动加载器就会找到它们而不再重新生成它.

在生产服务器上,您可以运行composer dump-autoload -o以提高其速度.只是不要忘记在每次部署后再次运行它(或者更好的是,在部署脚本中包含该命令).



1> axiac..:

PSR-4(以及PSR-0)要求将类ClassName存储在名为的文件中ClassName.php.名称区分大小写,并且必须完全匹配.

项目中的文件名是小写的,类名是大小写混合的.Windows和macOS上的默认磁盘格式在搜索时不区分大小写.这意味着当程序搜索Employee.php并且文件employee.php存在于目录中时,搜索成功并且OS返回现有文件,即使其名称的情况与所需文件的情况不同.在基于Linux的操作系统上,默认磁盘格式区分大小写,并且搜索的程序Employee.php无法找到employee.php.

您的composer.json文件将该app/目录声明为MyDomain遵循PSR-4标准的命名空间的根目录.这足以让自动加载器app/Models/Employee.php在需要加载类时找到该文件MyDomain\Models\Employee.

因为你在Ubuntu(这是一个基于Linux的操作系统)上运行它,PHP无法加载Employee.php文件(因为它不存在),操作系统不提供文件employee.php.

您似乎使用composer update -o或生成自动加载器composer dump-autoload -o.在-o(短--classmap-authoritative)告诉作曲家扫描中声明的目录composer.json(app/)在你的情况,并创建一个包含所有可以找到的类一类映射.classmap是一个列表,它将类名(带有命名空间)映射到文件名(带有目录).这样,自动加载器就可以确切地知道每个类的位置,并且加载速度更快.

以上两段解释了添加新类后需要重新生成自动加载器的原因.

正确的工作方式是遵循PSR-4要求.更具体地说,每个名称空间MyDomain必须存储在app/具有相同名称的子目录中,包括大小写.每个类必须存储在正确的子目录中,存储在与类(包括大小写)和终止.php(小写)同名的文件中.例如,类MyDomain\Models\Employee必须保留在文件中app/Models/Employee.php.

修复文件名后,您可以运行composer dump-autoload并忘记它.只要类和文件名遵循PSR-4,自动加载器就会找到它们而不再重新生成它.

在生产服务器上,您可以运行composer dump-autoload -o以提高其速度.只是不要忘记在每次部署后再次运行它(或者更好的是,在部署脚本中包含该命令).

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有