运行Symfony命令时无法加载PHP类

运行Symfony命令时无法加载PHP类,php,symfony,docker,rabbitmq,amqp,Php,Symfony,Docker,Rabbitmq,Amqp,我将感谢任何帮助,我可以得到以下问题 我已设置Symfony Messenger以使用AMQP和RabbitMQ。我可以在我的项目中发送消息并使用AMQPConnection 但当我尝试使用该消息时,我得到以下信息: $ php bin/console messenger:consume-messages amqp Attempted to load class "AMQPConnection" from the global namespace. Did

我将感谢任何帮助,我可以得到以下问题

我已设置Symfony Messenger以使用AMQP和RabbitMQ。我可以在我的项目中发送消息并使用AMQPConnection

但当我尝试使用该消息时,我得到以下信息:

$ php bin/console messenger:consume-messages amqp Attempted to load class "AMQPConnection" from the global namespace. Did you forget a "use" statement for "PhpAmqpLib\Connection\AMQPConnection"? 因此,当我从浏览器运行项目时,一切正常。我可以使用AMQP连接和所有。但是当从终端运行时,它找不到AMQPConnection类

在我的composer.json中,我还安装了amqplib

"php-amqplib/php-amqplib": "^2.7", “php amqplib/php amqplib”:“^2.7”, 我使用Docker,Dockerfile包含:

FROM php:7-apache RUN usermod -u 1000 www-data &&\ a2dissite 000-default &&\ apt-get update &&\ apt-get install -y \ zlib1g-dev \ libicu-dev \ g++ \ libfreetype6-dev \ libssh-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ librabbitmq-dev \ libpng-dev &&\ docker-php-ext-configure intl &&\ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&\ docker-php-ext-install -j$(nproc) gd pdo_mysql intl opcache zip pcntl exif bcmath sockets &&\ a2enmod rewrite RUN pecl install amqp \ && docker-php-ext-enable amqp COPY docker/apache2.conf /etc/apache2/apache2.conf WORKDIR /var/www/project 来自php:7-apache 运行usermod-u1000 www数据&&\ A2000违约&&\ apt获取更新&&\ apt-get-install-y\ zlib1g开发\ 图书馆发展\ g++\ libfreetype6开发\ libssh开发\ libjpeg62涡轮开发\ libmcrypt开发\ librabbitmq开发\ libpng开发&&\ docker php ext配置intl&&\ docker php ext配置gd--with freetype dir=/usr/include/--with jpeg dir=/usr/include/&&\ docker php ext安装-j$(nproc)gd pdo_mysql intl opcache zip pcntl exif bcmath套接字&&\ a2enmod重写 运行pecl安装amqp\ &&docker php ext启用amqp 复制docker/apache2.conf/etc/apache2/apache2.conf WORKDIR/var/www/project 更新
我已经打印了phpinfo(),在发送消息时,我有版本7.2.8,在执行终端命令时,我有版本7.2.7。因此,终端在执行命令时没有使用PHP的Docker实例。

最终解决了这个问题。我不知道我必须通过Docker来运行这个命令。这对我很有用:


docker exec-ti container\u name sh-c“cd/var/www/project/&&php bin/console messenger:consume messages amqp”

您的docker容器中缺少包
librabbitmq4
。将
运行apt get update--fix missing&&apt get update&&apt get install php amqp
添加到Docker文件并重建映像。

使用Docker时,需要在所需容器内执行Symfony命令

问题来自尝试从本地主机执行php:

$php bin/console messenger:使用消息amqp
而本地主机不具有必要的依赖关系,在本例中,
RabbitMQ

相反,应使用正确的容器运行该命令:

$docker exec-ti container\u name sh-c“cd/var/www/project/&&php-bin/console-messenger:使用消息amqp”

container\u name
是具有
RabbitMQ
依赖项的容器的名称。

您是否忘记了“PhpAmqpLib\Connection\AMQPConnection”的“use”语句?未添加该部分。更新了上面的问题。console命令使用以下方法:returnnew\AMQPConnection($credentials);。它可以创建消息,但不能使用它。区别在于当我使用Symfony控制台命令时。但在控制台命令代码中有use语句吗?可以添加命令类的相关代码吗?@JeroenI添加了使用AMQPConnection的语句。这真的很奇怪,在创建消息时使用了相同的方法,而且效果很好。当使用终端并激活命令以实际使用时,我得到了这个错误。传递给connect的凭据也正确无误,谢谢!这是有道理的!感谢..奖励赏金和+1 FROM php:7-apache RUN usermod -u 1000 www-data &&\ a2dissite 000-default &&\ apt-get update &&\ apt-get install -y \ zlib1g-dev \ libicu-dev \ g++ \ libfreetype6-dev \ libssh-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ librabbitmq-dev \ libpng-dev &&\ docker-php-ext-configure intl &&\ docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&\ docker-php-ext-install -j$(nproc) gd pdo_mysql intl opcache zip pcntl exif bcmath sockets &&\ a2enmod rewrite RUN pecl install amqp \ && docker-php-ext-enable amqp COPY docker/apache2.conf /etc/apache2/apache2.conf WORKDIR /var/www/project