【发布时间】:2018-03-24 04:53:26
【问题描述】:
- 我正在使用 docker。
- 发布更新命令(php 类)在作曲家更新后运行。
- 在我更新 Laravel 5.4->5.5 之前运行良好,它下载了新的 Symfony 包
- 作曲家清除缓存没有帮助
- 作曲家自我更新没有帮助
- 作曲家签名相等
[Symfony\Component\Debug\Exception\FatalThrowableError] 调用 未定义的方法 Illuminate\Foundation\Console\ClosureCommand::setHidden()
我正在搜索文件,并且此方法存在于父类中!我把这个小东西放在构造函数中是怎么回事:
use Symfony\Component\Console\Command\Command as SymfonyCommand;
class Command extends SymfonyCommand
{
public function __construct()
{
$r1 = new \ReflectionClass($this);
$r2 = new \ReflectionClass(SymfonyCommand::class);
var_dump([$r1->getFileName(), $r2->getFileName()]);
}
// rest of class
}
结果:composer 自动加载自己的旧 Command.php 而不是来自项目的这个。
array(2) {
[0]=>
string(91) "/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php"
[1]=>
string(67) "phar:///usr/bin/composer/vendor/symfony/console/Command/Command.php"
}
我想知道为什么 symfony 类不是从项目加载,而是从某个神奇的地方加载,以及如何解决这个问题。
附加信息:
添加 composer 的 php 的 Dockerfile:
# Composer
ENV PATH "/composer/vendor/bin:$PATH"
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV COMPOSER_VERSION 1.4.2
RUN curl -s -f -L -o /tmp/composer-setup.php https://getcomposer.org/installer
RUN curl -s -f -L -o /tmp/composer-setup.sig https://composer.github.io/installer.sig
RUN php -r " \
\$signature_php = hash('SHA384', file_get_contents('/tmp/composer-setup.php')); \
\$signature_sig = trim(file_get_contents('/tmp/composer-setup.sig')); \
echo ' SIGNATURE PHP: [' . \$signature_php . \"]\\n\"; \
echo ' SIGNATURE SIG: [' . \$signature_sig . \"]\\n\"; \
if (\$signature_php !== \$signature_sig) { \
unlink('/tmp/composer-setup.php'); \
echo 'Integrity check failed, installer is either corrupt or worse.' . PHP_EOL; \
exit(1); \
}"
RUN php /tmp/composer-setup.php --no-ansi --install-dir=/usr/bin cd --filename=composer --version=${COMPOSER_VERSION} \
&& rm /tmp/composer-setup.php \
&& composer --ansi --version --no-interaction
作曲部分:
"post-update-cmd": [
"Modules\\Core\\Composer\\ComposerScripts::postUpdate",
"php artisan vendor:publish --tag=public --force",
"php artisan optimize"
],
【问题讨论】:
-
错误是什么时候出现的?
-
通过
composer update或composer post-update-cmd执行,其中包含构建 Laravel 应用程序的脚本。 -
composer diagnose说什么? -
您的 post-update-cmd 在您的 composer.json 文件中的外观如何?
标签: php laravel symfony docker composer-php