FOS 用户更新错误

Posted

技术标签:

【中文标题】FOS 用户更新错误【英文标题】:FOS User update error 【发布时间】:2017-01-20 23:55:53 【问题描述】:

我正在使用 Sonata 进行 Symfony 2,8 项目。 我发现用户是用 FOS 管理的:

namespace Voyage\AdminBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\UserManagerInterface;

class UserCoreAdmin extends Admin 

    /**
     * @inheritdoc
     */
    public function getFormBuilder() 
        //...
    

    /**
     * @inheritdoc
     */
    public function getExportFields() 
        // avoid security field to be exported
    

    /**
     * @inheritdoc
     */
    protected function configureListFields(ListMapper $listMapper) 
        //...
    

    /**
     * @inheritdoc
     */
    protected function configureDatagridFilters(DatagridMapper $filterMapper) 
       //...
    

    /**
     * @inheritdoc
     */
    protected function configureShowFields(ShowMapper $showMapper) 
    //...
    

    /**
     * @inheritdoc
     */
    protected function configureFormFields(FormMapper $formMapper) 
        //...
    
    /**
     * @inheritdoc
     */
    public function preUpdate($user) 
        $this->getUserManager()->updateCanonicalFields($user);
        $this->getUserManager()->updatePassword($user);
    
    /**
     * @param UserManagerInterface $userManager
     */
    public function setUserManager(UserManagerInterface $userManager) 
        $this->userManager = $userManager;
    
    /**
     * @return UserManagerInterface
     */
    public function getUserManager() 
        return $this->userManager;
    

我在进行用户更新时收到此错误:

注意:未定义的属性: Voyage\AdminBundle\Admin\UserCoreAdmin::$userManager

500 内部服务器错误 - ContextErrorException

【问题讨论】:

【参考方案1】:

你应该扩展Sonata\UserBundle\Admin\Entity\UserAdmin,它应该有这个属性,而不是Sonata\AdminBundle\Admin\Admin

【讨论】:

这就是我所做的:使用 Sonata\UserBundle\Admin\Entity\UserAdmin; class UserCoreAdmin extends UserAdmin 但还是同样的错误! 但是如你所见,UserAdmin 继承自 this class,它具有缺失的属性。你能在你的安装中检查这个类吗? 我得到了捆绑包的第 2 版,但其中没有声明 $userManager! 那就用版本3吧,版本2已经不支持了。【参考方案2】:

services.yml 中缺少配置,缺少对 SetUserManager 的调用。

- [ setUserManager, [ @fos_user.user_manager]]      

【讨论】:

以上是关于FOS 用户更新错误的主要内容,如果未能解决你的问题,请参考以下文章

失败的作曲家更新,依赖于非存在的服务

Symfony 2.7 / 3 - Doctrine:您请求了一个不存在的服务“fos_user.doctrine_registry”

使用 FOS 用户 Symfony 4 登录后重定向问题

FOS UserBundle 无法登录

如何覆盖 FOS 用户捆绑表单标签

FOS 捆绑用户 - 多个角色