FOSUserBundle 2.1.2 с symfony 3.4.40: Нераспознанное поле: имя пользователя Каноническое - PullRequest
0 голосов
/ 07 мая 2020

Я только что настроил FOSUserBundle согласно документации. У меня есть два пакета: WebAppBundle и DbConnectionBundle

В WebAppBundle логин и регистрация работают нормально, проблем нет. В DBConnection вход в систему не работает, всегда выдается ошибка AuthenticationServiceException 'с сообщением' Нераспознанное поле: usernameCanonical '

Я тестирую php 5.6 на Debian 9

php bin / console doctrine: сопоставление: информация

Found .. mapped entries:
...
[OK]  Lugh\WebAppBundle\Entity\User
...
[OK]  FOS\UserBundle\Model\Group
[OK]  FOS\UserBundle\Model\Use

DbConnectionBundle / Entity / User. php

<?php

namespace Lugh\DbConnectionBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Config\Definition\Exception\Exception;

/**
 * @ORM\Entity
 * @ORM\Table()
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

config.yml. Я использую службу, чтобы определить, когда использовать fos_user user_class (WebAppBundle) или заменить на класс пользователя DbConnectionBundle

fos_user:
    db_driver: orm 
    firewall_name: main
    user_class: Lugh\WebAppBundle\Entity\User
    registration:
        form:
              type: lugh_user_registration
              name: fos_user_registration_form
    service:
        user_manager: lugh.user_manager.db_connection
        mailer: resseting.lugh.mailer
    from_email:
        address: "xxx@mail.com"
        sender_name: "sender"

lugh.user_manager.db_connection: UserManager. php

<?php

namespace Lugh\DbConnectionBundle\Service;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use FOS\UserBundle\Util\CanonicalizerInterface;
use Doctrine\Bundle\DoctrineBundle\Registry as RegistryInterface;

#use FOS\UserBundle\Entity\UserManager as BaseUserManager;
use FOS\UserBundle\Doctrine\UserManager as BaseUserManager;

use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\Persistence\ObjectRepository;
use FOS\UserBundle\Util\CanonicalFieldsUpdater;
use FOS\UserBundle\Util\PasswordUpdaterInterface;


class UserManager extends BaseUserManager {

    /**
    * Constructor.
    *
    * @param PasswordUpdaterInterface $passwordUpdater
    * @param CanonicalFieldsUpdater   $canonicalFieldsUpdater
    * @param RegistryInterface        $doctrine
    * @param string                   $connName
    * @param string                   $class
    * @param string                   $custom_class
    */

   public function __construct(PasswordUpdaterInterface $passwordUpdater, CanonicalFieldsUpdater $canonicalFieldsUpdater,
                               RegistryInterface $doctrine, $connName, $class, $custom_class)
   {
       global $kernel;
       if ('AppCache' == get_class($kernel)) {
            $kernel = $kernel->getKernel();
       }
       $request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();

       $om = $doctrine->getManager();       
       if ($kernel->getContainer()->get('lugh.route.template')->isAdminAddr($request->getHttpHost()))
       {
           $om = $doctrine->getManager($connName);
           $class = $custom_class;
       }

       parent::__construct($passwordUpdater, $canonicalFieldsUpdater, $om, $class);
   }

   /**
    * Just for test
    * @return EntityManager
    */
   public function getOM()
   {
       return $this->objectManager;
   }
}

doctrine конфигурация

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: default
        connections:
          default:
            wrapper_class:  Lugh\WebAppBundle\Lib\CustomConnection
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
          db_connection:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_connection_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        # naming_strategy: doctrine.orm.naming_strategy.underscore
        # auto_mapping: true
        default_entity_manager: default
        entity_managers:
          default:
            connection: default
            mappings:
              LughWebAppBundle: ~
              FOSUserBundle: ~
          db_connection:
            connection: db_connection
            mappings:
              LughDbConnectionBundle: ~
              FOSUserBundle: ~

Итак, работает нормально с WebAppBundle, но не с DbConnectionBundle.

Оцените любые подсказки, где посмотрите, а что попробовать

Спасибо!

...