composer报错Class 'XXXX' not found

今天用rabbitmq异步优化接口时,由于当前项目没有php-amqp扩展包,所以将另一个项目里的整个包复制过来,结果运行后报如下错误:

<p>Type: Error</p>
	<p>Message: Class 'PhpAmqpLib\Connection\AMQPStreamConnection' not found</p>
	<p>Filename: /Users/why/Desktop/ymt/hangqing-ditu/phplib/libraries/Lib_amqp.php</p>
	<p>Line Number: 35</p>

当时一脸懵比,然后用diff对比两个项目里的vender目录,发现在autoload_psr4.php文件中有一处不同:

当前有问题的项目:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
);

另一个没问题的项目:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
    'PhpAmqpLib\\' => array($vendorDir . '/php-amqplib/php-amqplib/PhpAmqpLib'),
);

可以很明显地发现由于是手动复制的,不是通过composer安装的,所以并没有在psr4文件中添加扩展的映射,果不其然,加上之后完美解决。

但是!但是!但是!重要的事情说三遍,上线之后,报错了,同样找不到文件,为什么呢?原因是,composer是通过composer.json文件加载的,所以最根本的解决方案是在composer文件中添加扩展配置

看来composer还是不够熟悉,只知道composer require xxx之后直接用,需要了解一下它的原理。

发布了226 篇原创文章 · 获赞 31 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/why444216978/article/details/104534649