Я только что настроил 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.
Оцените любые подсказки, где посмотрите, а что попробовать
Спасибо!