在今天更新了composer依赖项(使用composer update命令)后,我的Yii2应用程序被破坏了 - 它抛出了未知方法 - yii\base\UnknownMethodException:调用未知方法:yii\web\UrlManager :: addRules()
在检查vendor/yiisoft/yii2/web/UrlManager.php文件后,我发现没有方法addRule.整个类UrlManager与存储库中的类不同.
我的composer.json:
"minimum-stability": "dev",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": "*",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*",
"yiisoft/yii2-gii": "2.0.0-beta",
"claudejanz/yii2-mygii": "*",
"kartik-v/yii2-grid": "dev-master",
"kartik-v/yii2-builder": "dev-master",
"2amigos/yii2-switch-widget": "*",
"yiisoft/yii2-jui": "*",
"DsXack/yii2-underscore": "*",
"2amigos/yii2-editable-widget": "*",
"warrence/yii2-kartikgii": "*"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",
"yiisoft/yii2-debug": "*"
},
Run Code Online (Sandbox Code Playgroud)
ric*_*dgf 13
我认为他们已经改变了通过作曲家加载一些库的方式.
解决它:
添加到composer.json
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
Run Code Online (Sandbox Code Playgroud)
并运行:
# php composer.phar global require "fxp/composer-asset-plugin:1.0.*@dev"
# php composer.phar update --dev
Run Code Online (Sandbox Code Playgroud)
完全归功于:@githubjeka和@SonicGD
ceb*_*ebe 12
以下是对此发生原因的解释:
我认为这又是作曲家依赖解析器做出意想不到的事情:
- 你
yiisoft/yii2在composer.json中需要但是没有安装composer资产插件.- 然后,依赖项解析程序找不到包含供应商的包,
bower-asset因此它会查找yiisoft/yii2没有冲突的其他版本- 结果是安装要安装的测试版yii2
如前所述,正确的解决方案是安装composer-asset-plugin:
php composer.phar global require "fxp/composer-asset-plugin:1.0.*@dev"
Run Code Online (Sandbox Code Playgroud)