小编Moh*_*ria的帖子

FOSUserBundle的多个实体管理器

如果相当容易,在Symfony中使用基于URL的不同实体管理器/连接.使用以下路由配置

connection:
    pattern:  /a/{connection}
    defaults: { _controller: AcmeTestBundle:User:index }
Run Code Online (Sandbox Code Playgroud)

并从以下食谱;

如何使用多个实体管理器和连接

我的控制器看起来像这样;

class UserController extends Controller
{
    public function indexAction($connection)
    {

        $products = $this->get('doctrine')
            ->getRepository('AcmeStoreBundle:Product', $connection)
            ->findAll()
        ;
        ..................
Run Code Online (Sandbox Code Playgroud)

我将能够从不同的em/connection /数据库中获取产品信息.

现在,如果我在路由中添加这样的内容;

login:
    pattern:  /a/{connection}/login
    defaults: { _controller: FOSUserBundle:Security:login }
Run Code Online (Sandbox Code Playgroud)

如何轻松地使登录使用连接变量中定义的连接

此设置假设每个数据库都有自己的用户登录信息(fos_user表).

编辑:更新的路由信息

EDIT2:

我仍然是PHP/Symfony/Doctrine的新手,所以如果我在这里完全错了,请原谅我.我尝试在FOS\UserBundle\Doctrine\UserManager中手动设置连接.以下是该类的构造函数

//
use Doctrine\Common\Persistence\ObjectManager;
//

public function __construct(EncoderFactoryInterface $encoderFactory, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, ObjectManager $om, $class)
{
    parent::__construct($encoderFactory, $usernameCanonicalizer, $emailCanonicalizer);

    $this->objectManager = $om;
    $this->repository = $om->getRepository($class);

    $metadata = …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm fosuserbundle

40
推荐指数
1
解决办法
5611
查看次数

为FOSUserBundle动态更改服务参数值

我之前询问过为FOSUserBundle使用多个实体管理器,事实证明FOSUserBundle已经(部分)支持了它.所有我需要做的是指定连接/经理,我想在使用model_manager_name参数,如解释在这里

fos_user:
# ........
    model_manager_name: account1
Run Code Online (Sandbox Code Playgroud)

示例app/config/config.yml

使用此FOSUserBundle将使用account1连接,并在该连接的数据库中使用用户信息.

doctrine:
dbal:
    default_connection:       default
    connections:
    account2:
        dbname:           account2
        user:             account2
        password:         password2
        driver:   pdo_mysql
        host:     localhost
        port:     ~
        charset:  UTF8
    account1:
        dbname:           account1
        user:             account1
        password:         password1
        driver:   pdo_mysql
        host:     localhost
        port:     ~
        charset:  UTF8
    default:
        dbname:           account
        user:             account
        password:         password
        driver:   pdo_mysql
        host:     localhost
        port:     ~
        charset:  UTF8
Run Code Online (Sandbox Code Playgroud)

我的应用程序要求当用户访问(例如)http://myapp.com/a/account1时,应用程序将使用account1连接,并且转到http://myapp.com/a/account2将使用account2的连接.对于我的应用程序的逻辑,这可以通过我的控制器轻松完成,因为我可以使用类似下面的内容;

$em = $this->get('doctrine')->getManager('account2');
$repository = $this->get('doctrine')->getRepository($class, …
Run Code Online (Sandbox Code Playgroud)

dependency-injection symfony fosuserbundle

3
推荐指数
1
解决办法
4649
查看次数