【问题标题】:Yii2 Error: yii\base\UnknownMethodException: Calling unknown method: yii\web\UrlManager::addRules()Yii2 错误:yii\base\UnknownMethodException:调用未知方法:yii\web\UrlManager::addRules()
【发布时间】:2014-11-11 02:30:02
【问题描述】:

在今天更新 composer 依赖项(使用 composer update 命令)后,我的 Yii2 应用程序损坏了 - 它抛出 Unknown Method – yii\base\UnknownMethodException: Calling unknown method: yii\web\UrlManager::addRules()

查看vendor/yiisoft/yii2/web/UrlManager.php文件后发现没有addRule方法。 并且整个类UrlManager与repository中的类不同。

我的 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": "*"
},

【问题讨论】:

  • 在将 kartik-v 小部件添加到 require 部分后调用“composer update”后,我遇到了完全相同的问题。仍在试图弄清楚发生了什么:(

标签: composer-php yii2


【解决方案1】:

我认为他们改变了一些库通过 composer 加载的方式。

解决它:

添加到 composer.json

 "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }

然后运行:

# php composer.phar global require "fxp/composer-asset-plugin:1.0.*@dev"
# php composer.phar update --dev

更多信息:Issue on GithubIssue on Github

完全归功于:@githubjeka 和 @SonicGD

【讨论】:

  • 肯定会+1。我之前在 Github 问题上没有找到它:(
  • 我已经这样做了,但我的问题仍然没有解决仍然说 csrf 元标记错误
【解决方案2】:

Here 解释了为什么会发生这种情况:

我认为这又是作曲家依赖解析器在做意想不到的事情:

  • 您在 composer.json 中需要 yiisoft/yii2,但没有安装 composer 资产插件。
  • 然后依赖解析器找不到供应商 bower-asset 的软件包,因此它会查找不存在冲突的 yiisoft/yii2 的其他版本
  • 结果是安装了要安装的yii2 beta版

如前所述,正确的解决方案是安装composer-asset-plugin

php composer.phar global require "fxp/composer-asset-plugin:1.0.*@dev"

【讨论】:

    【解决方案3】:

    似乎更新完全错误,因为文件与 github 上的文件不同 - 缺少几个功能。

    我必须做些什么来“摆脱”这个错误:

    从本地文件的存储库中复制代码:

    https://github.com/yiisoft/yii2/blob/master/framework/web/UrlManager.php

    https://raw.githubusercontent.com/yiisoft/yii2/master/framework/helpers/BaseHtml.php

    这暂时解决了我的问题。

    【讨论】:

    • 谢谢,希望他们修好
    • 希望如此.. 但他们在文档中说.. 不要在生产中使用...现在我们知道为什么了:D
    • 即使从 github 复制文件可以解决问题,但正确的解决方案是安装 composer-asset-plugin。因此,请将建议安装插件的答案之一标记为解决方案,而不是这个答案。
    【解决方案4】:

    就像 ricardgf 所说,请阅读以下内容:

    https://github.com/yiisoft/yii2/blob/master/docs/guide/start-installation.md

    然后运行:

    composer.phar global require "fxp/composer-asset-plugin:1.0.*@dev"

    composer.phar update --prefer-source --no-interaction

    【讨论】:

      【解决方案5】:

      好的,我通过这种方式解决了安装 yii2 的问题:

      composer 全局需要 "fxp/composer-asset-plugin:1.0.*@dev"

      composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic basic

      【讨论】:

        【解决方案6】:

        尝试将您的 composer.json 更新为以下方式:

        "require": {
            "yiisoft/yii2": "*"
        },
        

        在项目目录下,写这个命令-

        php composer.phar update
        

        【讨论】:

        • 好吧,我发现你的 yiisoft/yii2/web/UrlManager.php 中没有 addRules($rules, $append = true) 函数。奇怪!!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 2015-05-30
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        相关资源
        最近更新 更多