Php 未找到编写器PSR-4自动加载类
我已经绞尽脑汁想了几个小时,想弄明白为什么自动加载不能用于“Authentication\auth()”。“dBase\db()”类正在加载,但我得到了: 错误:在中找不到类“Authentication\auth” /第8行的var/htdocs/dev/test.php 调用test.php时 Root composer.json-Php 未找到编写器PSR-4自动加载类,php,namespaces,composer-php,autoload,psr-4,Php,Namespaces,Composer Php,Autoload,Psr 4,我已经绞尽脑汁想了几个小时,想弄明白为什么自动加载不能用于“Authentication\auth()”。“dBase\db()”类正在加载,但我得到了: 错误:在中找不到类“Authentication\auth” /第8行的var/htdocs/dev/test.php 调用test.php时 Root composer.json- "require": { "geeshoe/dbClass": "dev-develop", "geeshoe/authClass": "
"require": {
"geeshoe/dbClass": "dev-develop",
"geeshoe/authClass": "dev-master"
},
"autoload": {
"psr-4": {
"dBase\\": "vendor/geeshoe/dbclass/",
"Authentication\\": "vendor/geeshoe/authClass/"
}
}
authClass.php头文件-
<?php
namespace Authentication;
use dBase\db;
class auth extends db
{
如果有人能向我指出显而易见的事情,那就太好了。另一方面,出于测试目的,authClass->composer.json文件中没有指定自动加载。这里的问题是,实际上您没有使用PSR-4。在PSR-4中,类名应与文件名匹配。对于
db
类来说,这很好,因为db类位于db.php
文件中,而auth
类位于authClass.php
文件中,这就是问题所在。您应该将文件名更新为auth.php
您可能需要运行:
composer dump-autoload
还请记住,在实际软件包中,一个供应商软件包有一个名称空间,因此您不会为单个软件包创建多个名称空间,而只创建一个名称空间。
vendor/
中的任何内容都是由composer创建/控制的,并且应该已经定义了自己的自动加载配置。不要在composer.json
中为它们添加条目。2.请勿在供应商/
内创建或修改任何内容,只有composer本身才应触摸此文件夹及其任何内容。您的代码应该位于项目文件夹中的其他位置,例如:src/
或lib/
@Sammitch谢谢您提供的信息。这两个类都在开发中,尚未准备好生产,因此没有在各自的composer.json文件中配置自动加载..Nabialek谢谢,这就是我要找的。我一直认为PSR-4自动加载是通过名称空间绑定的,而不是通过类名和文件名绑定的。PSR-4中的“类名应该与类名匹配”@jax,已修复。很高兴我能帮忙
composer dump-autoload