- 我正在使用docker
- 更新后命令(php类)在composer更新后运行
- 一直工作得很好,直到我做了Laravel更新5.4->5.5,下载了新的Symfony软件包
- composer清除缓存没有帮助
- composer自我更新没有帮助
- 作曲家签名相等
[Symfony\Component\Debug\Exception\FatalThrowableError]调用未定义方法照明\基础\控制台\关闭命令::setHidden()
我正在遍历文件,并且这个方法存在于父类中!我把这个小东西放在构造函数中,正在发生什么:
use SymfonyComponentConsoleCommandCommand 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的签名不匹配,你必须知道签名可以更改,如果你想获得最后一个,请使用这个urlhttps://composer.github.io/installer.sig
使用此代码段验证签名。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php -r "if (hash_file('SHA384', 'composer-setup.php') === '$(wget -q -O - https://composer.github.io/installer.sig)') {
echo 'Installer good';
} else {
echo 'Installer corrupt'; die;
} echo PHP_EOL;"
我认为运行composer self-update
命令也会更新composer的签名。此外,如果您可以通过ssh访问服务器,我建议您尝试以下操作:
- 删除
composer.lock
- 删除
vendor
文件夹 - 运行
composer install
这应该可以解决您提到的所有问题。
这就是我安装composer(Alpine,php7.1-fpm,自编译nginx)的方法
EXPECTED_COMPOSER_SIGNATURE=$(wget -q -O - https://composer.github.io/installer.sig) &&
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" &&
php -r "if (hash_file('SHA384', 'composer-setup.php') === '${EXPECTED_COMPOSER_SIGNATURE}') { echo 'Composer.phar Installer verified'; } else { echo 'Composer.phar Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" &&
php composer-setup.php --install-dir=/usr/bin --filename=composer &&
php -r "unlink('composer-setup.php');"
并尝试将您的后安装更改为此(laravel 5.5,码头化并平稳运行)
"post-update-cmd": [
"Illuminate\Foundation\ComposerScripts::postUpdate",
"php artisan optimize"
.....