在 Symfony/SonataUserBundle 设置中调用方法 setCurrentUri 失败

Posted

技术标签:

【中文标题】在 Symfony/SonataUserBundle 设置中调用方法 setCurrentUri 失败【英文标题】:Call to method setCurrentUri fails in Symfony/SonataUserBundle setup 【发布时间】:2014-10-01 01:32:05 【问题描述】:

我正在尝试使用 SonataUserBundle 设置 Symfony。用户注册和登录工作正常。当我尝试调用 /profile 视图时,出现以下错误:

Attempted to call method "setCurrentUri" on class "Knp\Menu\MenuItem" in F:\<my project path>\vendor\sonata-project\user-bundle\Block\ProfileMenuBlockService.php line 91. Did you mean to call: "setCurrent"?

错误前“事件列表”中的最后一条通知是

INFO - [cms::renderBlock] block.id=53, block.type=sonata.user.block.menu

以前有没有人遇到过这个错误并且可以提供如何解决它的信息?

TIA 马特

【问题讨论】:

【参考方案1】:

您使用的是什么版本的KnpMenuSonataBlockBundle?请确认您的composer.json

setCurrentUri 方法自 KnpMenu v. 2.0 起已弃用,SonataBlockBundlecomposer.json 不需要 KnpMenu 任何地方,但在 dev 安装中。因此,这可能导致您可能需要新版本的 knplabs/knp-menu-bundle,但 Sonata 捆绑包尚不支持。

尝试在1.1.x 中要求knplabs/knp-menu-bundle


    ...
    "require": 
        "knplabs/knp-menu-bundle": "~1.1"
    ,
    ...

【讨论】:

成功了。使用:"knplabs/knp-menu": "~1.1", "knplabs/knp-menu-bundle": "~1.1"【参考方案2】:

我遇到了同样的问题,但我们的项目无法降级到 Knpmenu 版本 1。由于some code update the June 16th,现在可以使用 Sonata User Bundle 和 Knp Menu Version 2。

请看一下我的 composer.json :

"require": 
    "php": ">=5.3.9",
    "symfony/symfony": "2.7.*",
    "doctrine/orm": "^2.4.8",
    "doctrine/doctrine-bundle": "~1.4",
    "doctrine/doctrine-fixtures-bundle": "dev-master",
    "doctrine/migrations": "dev-master",
    "doctrine/doctrine-migrations-bundle": "dev-master",
    "symfony/assetic-bundle": "~2.3",
    "symfony/swiftmailer-bundle": "~2.3",
    "symfony/monolog-bundle": "~2.4",
    "sensio/distribution-bundle": "~4.0",
    "sensio/framework-extra-bundle": "^3.0.2",
    "incenteev/composer-parameter-handler": "~2.0",
    "friendsofsymfony/user-bundle": "~1.3",
    "friendsofsymfony/message-bundle": "^1.2",
    "sonata-project/admin-bundle": "^2.3",
    "sonata-project/doctrine-orm-admin-bundle": "^2.3",
    "sonata-project/easy-extends-bundle": "^2.1",
    "sonata-project/user-bundle": "dev-master",
    "sonata-project/datagrid-bundle": "dev-master",
    "sonata-project/block-bundle": "~2.2,>=2.2.7,<2.3",
    "sonata-project/exporter": "^1.4",
    "sonata-project/intl-bundle": "^2.2",
    "knplabs/knp-menu-bundle": "~2.0",
    "knplabs/knp-menu": "~2.0"
,

如您所见,sonata-project/user-bundle 在 dev-master 版本下,我必须在 dev-master 中添加 sonata-project/datagrid-bundle

希望对想要保留 KnpMenu V2 的开发者有所帮助!

【讨论】:

【参考方案3】:

我有同样的问题,这是我的解决方案,你可以保留 KnpMenu V2。

-您在 C:\path\vendor\sonata-project\user-bundle\Block\ProfileMenuBlockService.php 中将 setCurrentUri 更改为 setCurrent(因为 KNP 更改了代码)

-你可以有这个问题,Method "currentAncestor" for object "Knp\Menu\MenuItem" does not exist in Sonata

这对我有用。

【讨论】:

以上是关于在 Symfony/SonataUserBundle 设置中调用方法 setCurrentUri 失败的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据