作曲家 PSR-4 自动加载器 "class not found" 错误
composer PSR-4 autoloader "class not found" error
我尝试添加项目目录路径中不存在的 DieEcho
class。但是当我尝试在 index.php 文件中实现 class 时出现错误。:
Fatal error: Uncaught Error: Class 'Trzczy\Debug\DieEcho' not found in /home/j/Projects/project84/public/index.php:8 Stack trace: #0 {main} thrown in /home/j/Projects/project84/public/index.php on line 8
目录树是这样的:
├── debug
│ └── php
│ └── DieEcho.php
└── project84
├── composer.json
└── public
└── index.php
我 运行 composer dump-autoload
所以 autoload_psr4.php 中的条目出现了:
j@debian:~/Projects/project84$ cat ../../vendors/project84/composer/autoload_psr4.php
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir)).'/Projects/project84';
return array(
//(...)
'Trzczy\Debug\' => array($baseDir . '/../debug/php'), //the entry
//(...)
);
j@debian:~/Projects/project84$
DieEcho.php class:
j@debian:~/Projects/project84$ cat ../debug/php/DieEcho.php
<?php
namespace Trzczy\Debug;
class DieEcho
{
//(...)
}
j@debian:~/Projects/project84$
我尝试以这种方式在 index.php 中实现 class:
j@debian:~/Projects/project84$ cat public/index.php
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
use Trzczy\Debug\DieEcho;
error_reporting(-1);
ini_set('display_errors', true);
new DieEcho;
//(...)
更新
composer.json:
j@debian:~/Projects/project84$ cat composer.json
{
"config": {
"vendor-dir": "../../vendors/project84"
},
//(...)
"autoload": {
"psr-4": {
"Application\": "module/Application/src/",
"Trzczy\Debug\": "../debug/php/"
}
},
//(...)
}
j@debian:~/Projects/project84$
我做错了什么?这是在 zend framework 3 项目中,但我不知道这个信息是否重要。
原因是 autoload.php
的包含放在 class 实施之后。当我在包含 autoload.php
之后移动实现时,它成功了。感谢@Magnus Eriksson 的评论。
我尝试添加项目目录路径中不存在的 DieEcho
class。但是当我尝试在 index.php 文件中实现 class 时出现错误。:
Fatal error: Uncaught Error: Class 'Trzczy\Debug\DieEcho' not found in /home/j/Projects/project84/public/index.php:8 Stack trace: #0 {main} thrown in /home/j/Projects/project84/public/index.php on line 8
目录树是这样的:
├── debug
│ └── php
│ └── DieEcho.php
└── project84
├── composer.json
└── public
└── index.php
我 运行 composer dump-autoload
所以 autoload_psr4.php 中的条目出现了:
j@debian:~/Projects/project84$ cat ../../vendors/project84/composer/autoload_psr4.php
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir)).'/Projects/project84';
return array(
//(...)
'Trzczy\Debug\' => array($baseDir . '/../debug/php'), //the entry
//(...)
);
j@debian:~/Projects/project84$
DieEcho.php class:
j@debian:~/Projects/project84$ cat ../debug/php/DieEcho.php
<?php
namespace Trzczy\Debug;
class DieEcho
{
//(...)
}
j@debian:~/Projects/project84$
我尝试以这种方式在 index.php 中实现 class:
j@debian:~/Projects/project84$ cat public/index.php
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
use Trzczy\Debug\DieEcho;
error_reporting(-1);
ini_set('display_errors', true);
new DieEcho;
//(...)
更新
composer.json:
j@debian:~/Projects/project84$ cat composer.json
{
"config": {
"vendor-dir": "../../vendors/project84"
},
//(...)
"autoload": {
"psr-4": {
"Application\": "module/Application/src/",
"Trzczy\Debug\": "../debug/php/"
}
},
//(...)
}
j@debian:~/Projects/project84$
我做错了什么?这是在 zend framework 3 项目中,但我不知道这个信息是否重要。
原因是 autoload.php
的包含放在 class 实施之后。当我在包含 autoload.php
之后移动实现时,它成功了。感谢@Magnus Eriksson 的评论。