运行 Symfony 命令时无法加载 PHP 类
Posted
技术标签:
【中文标题】运行 Symfony 命令时无法加载 PHP 类【英文标题】:Cannot load PHP class when running Symfony command 【发布时间】:2019-01-14 04:23:09 【问题描述】:如果我能在以下问题上获得任何帮助,我将不胜感激。
我已将 Symfony Messenger 设置为使用 AMQP 和 RabbitMQ。我可以在我的项目中发送消息并使用 AMQPConnection。
但是当我尝试使用消息时,我得到以下信息:
$ php bin/console messenger:consume-messages amqp 尝试从全局命名空间加载类“AMQPConnection”。 您是否忘记了“PhpAmqpLib\Connection\AMQPConnection”的“使用”语句?控制台命令调用AmqpFactory.php
内的方法
所以当我从浏览器运行项目时,一切正常。我可以使用 AMQPConnection 和所有。但是从终端运行时,找不到 AMQPConnection 类。
在我的 composer.json 中,我还安装了 amqplib
"php-amqplib/php-amqplib": "^2.7",我使用 Docker,Dockerfile 包含:
来自 php:7-apache 运行 usermod -u 1000 www-data &&\ a2dissite 000-默认 &&\ apt-get 更新 &&\ apt-get 安装 -y \ zlib1g-开发\ libicu开发者\ 克++\ libfreetype6-开发\ libssh-开发\ libjpeg62-turbo-dev \ libmcrypt-开发\ librabbitmq-开发\ libpng-开发 &&\ docker-php-ext-configure 国际 &&\ 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 重写 运行 pecl 安装 amqp \ && docker-php-ext-启用 amqp 复制 docker/apache2.conf /etc/apache2/apache2.conf 工作目录 /var/www/project更新! 我已经打印了 phpinfo() 并且在发送消息时我有版本 7.2.8 并且在执行终端命令时我有 7.2.7。所以终端在执行命令时没有使用PHP的Docker实例。
【问题讨论】:
您是否忘记了“PhpAmqpLib\Connection\AMQPConnection”的“使用”语句? 错过了添加该部分。更新了上面的问题。控制台命令使用此方法:return new \AMQPConnection($credentials);。它可以创建消息,但不能使用它。区别在于消费时我使用 Symfony 控制台命令。 但是你的控制台命令代码中有 use 语句吗?可以添加Command类的相关代码吗? @JeroenI 添加了使用 AMQPConnection 的语句。真的很奇怪,创建消息时使用了相同的方法,效果很好。使用终端并激活命令以实际使用时,出现此错误。传递给连接的凭据也是正确的 【参考方案1】:终于解决了。我不知道我必须通过 Docker 来运行这个命令。这对我有用:
docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
【讨论】:
【参考方案2】:您的 Docker 容器中缺少包 librabbitmq4
。将RUN apt-get update --fix-missing && apt-get update && apt-get install php-amqp
添加到您的 Dockerfile 并重建映像。
【讨论】:
【参考方案3】:使用 Docker 时,Symfony 命令需要在需要的容器内执行。
问题来自尝试从本地主机执行 php:
$ php bin/console messenger:consume-messages amqp
而本地主机没有具有必要的依赖关系,在这种情况下为RabbitMQ
。
应该使用正确的容器运行命令:
$ docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
container_name
是具有RabbitMQ
依赖项的容器的名称。
【讨论】:
谢谢!这就说得通了!欣赏它..奖励赏金和 +1以上是关于运行 Symfony 命令时无法加载 PHP 类的主要内容,如果未能解决你的问题,请参考以下文章
我无法发出任何工匠命令...每当我运行命令时,它都会说无法加载 php mbstring.so 5.6
symfony 不能在 Windows Server 2008 上运行