如何在CodeIgniter 3.1.8控制器中使用Composer安装的php-amqplib?
在CodeIgniter 3.1.8中使用php-amqplib库的解决方案
嘿,我来帮你搞定这个问题!你已经完成了库的安装步骤,接下来只需要正确引入Composer的自动加载文件,就能在控制器里轻松使用php-amqplib了,完全不用重复定义FCPATH。
第一步:确保CodeIgniter加载Composer自动加载器
你提到index.php里已经定义了FCPATH,那直接用这个路径引入vendor目录下的autoload.php就行,不用额外定义。
打开项目根目录下的index.php,找到加载CodeIgniter核心文件的那一行(大概在文件末尾,代码是require_once BASEPATH.'core/CodeIgniter.php';),在这一行之前添加下面的代码:
// 引入Composer自动加载器,直接使用已定义的FCPATH require_once FCPATH . 'vendor/autoload.php';
这样就完成了全局自动加载配置,整个项目都能直接调用Composer安装的包了。
第二步:在控制器方法中使用php-amqplib
现在你可以在任意控制器的方法里直接调用php-amqplib的类,有两种常用方式:
方式一:用use声明简化类名
在控制器方法内部(或控制器类顶部)声明要使用的类,后续代码就能用短类名调用:
public function send_rabbitmq_msg() { // 声明需要用到的php-amqplib类 use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; // 建立RabbitMQ连接 $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); // 声明队列 $channel->queue_declare('ci_test_queue', false, false, false, false); // 创建并发送消息 $msg_content = "这是来自CodeIgniter控制器的测试消息!"; $msg = new AMQPMessage($msg_content); $channel->basic_publish($msg, '', 'ci_test_queue'); // 关闭资源 $channel->close(); $connection->close(); echo "消息发送成功!"; }
方式二:直接使用完整命名空间
如果不想用use声明,也可以直接在实例化类时写完整的命名空间路径:
public function receive_rabbitmq_msg() { // 直接用完整命名空间实例化类 $connection = new \PhpAmqpLib\Connection\AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('ci_test_queue', false, false, false, false); echo "等待接收消息...\n"; $callback = function ($msg) { echo "收到消息:", $msg->body, "\n"; }; $channel->basic_consume('ci_test_queue', '', false, true, false, false, $callback); while ($channel->is_consuming()) { $channel->wait(); } $channel->close(); $connection->close(); }
注意事项
- 确保你的RabbitMQ服务已正常启动,连接参数(主机、端口、用户名、密码)和实际配置一致。
- 如果你是在项目根目录执行的
composer require,那FCPATH.'vendor/autoload.php'就是正确的路径,不用调整。
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

