Php 具有多个数据库的FOSUserBundle
我有一个系统。在一个有客户的实体中。我想从这个系统向另一个网站/系统的客户端发送身份验证,并将这个客户端作为fos_用户转储/插入该系统。在这两个系统中,我都使用FOSUserBundle进行用户登录/身份验证 如果我从这个链接使用,它对我和系统用户都有好处。将客户作为fos_用户插入另一个网站。及 从当前网站登录 但问题是,在我当前的网站中,即使我在当前网站中切换数据库连接,更改密码和注册也不起作用Php 具有多个数据库的FOSUserBundle,php,fosuserbundle,symfony-2.3,Php,Fosuserbundle,Symfony 2.3,我有一个系统。在一个有客户的实体中。我想从这个系统向另一个网站/系统的客户端发送身份验证,并将这个客户端作为fos_用户转储/插入该系统。在这两个系统中,我都使用FOSUserBundle进行用户登录/身份验证 如果我从这个链接使用,它对我和系统用户都有好处。将客户作为fos_用户插入另一个网站。及 从当前网站登录 但问题是,在我当前的网站中,即使我在当前网站中切换数据库连接,更改密码和注册也不起作用 public function sendAuthAction(Request $request
public function sendAuthAction(Request $request)
{
$user = $this->get('security.context')->getToken()->getUser();
$request = $this->getRequest();
$id = $request->get('id');
$em = $this->get('doctrine')->getManager();
$client = $em->getRepository('AcmeClientBundle:Clients')->find($id);
$username = $client->getName();
$password= "";//here i auto generate the password;
$email= $client->getEmail();
$this->get('doctrine.dbal.dynamic_connection')->forceSwitch($dbname2, $dbuser2, $dbpass2);
$em2 = $this->get('doctrine')->getManager('dynamic');
$client = $em2->getRepository('AcmeUserBundle:User')->findBy(array('email' => $email));
if($client)
{
return new JsonResponse('You had alreay send authentication to this client.');
}
$userManager = $this->container->get('fos_user.user_manager');
$newuser = $userManager->createUser();
$newuser->setEnabled(true);
$newuser->setPlainPassword($password);
$newuser->setUsername($username);
$newuser->setRoles(array('ROLE_USER'));
$newuser->setEmail($email);
$userManager->updateUser($newuser, true);
$this->get('doctrine.dbal.dynamic_connection')->forceSwitch($dbname, $dbuser, $dbpass);
return new JsonResponse('success');
}
使用这种方法可以解决问题
model_manager_name: dynamic #or default
但在这种情况下,config.yml FOSUserBundle中定义的任何连接都只适用于该连接。所以我可以在当前系统中登录和注册,也可以在第二个系统中立即插入客户端
我想知道有没有任何方法,我在两种学说的连接之间进行切换,同时为这两种学说都进行FOSUserBundle工作
我的配置文件在这里:
doctrine:
dbal:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
dynamic:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name2%" # it's not given in case of compilerpassinterface
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
wrapper_class: 'Acme\DoctrineBundle\Connection\ConnectionWrapper' #it's in case for dynamically switching db.
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
FOSUserBundle: ~
AcmeUserBundle: ~
AcmeClientBundle: ~
dynamic:
connection: dynamic
mappings:
FOSUserBundle: ~
AcmeUserBundle: ~
AcmeClientBundle: ~
fos_user:
db_driver: orm
firewall_name: main
user_class: Acme\UserBundle\Entity\User
registration:
form:
type: acme_user_registration
change_password:
form:
type: acme_user_change_password
name: acme_user_change_password
doctrine:
dbal:
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
dynamic:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name2%" # it's not given in case of compilerpassinterface
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
wrapper_class: 'Acme\DoctrineBundle\Connection\ConnectionWrapper' #it's in case for dynamically switching db.
orm:
auto_generate_proxy_classes: "%kernel.debug%"
entity_managers:
default:
connection: default
mappings:
FOSUserBundle: ~
AcmeUserBundle: ~
AcmeClientBundle: ~
dynamic:
connection: dynamic
mappings:
FOSUserBundle: ~
AcmeUserBundle: ~
AcmeClientBundle: ~
fos_user:
db_driver: orm
firewall_name: main
user_class: Acme\UserBundle\Entity\User
registration:
form:
type: acme_user_registration
change_password:
form:
type: acme_user_change_password
name: acme_user_change_password