Symfony4:如何使用dotenv和多个实体管理器切换实体?

时间:2019-01-08 10:42:24

标签: doctrine symfony4

如何通过dotenv选择具有相同实体名称的不同实体路径。

最初,我们在Symfony 3中应用了有关组织活动的人员会议。然后,我们决定将此应用程序提供给我们的合作伙伴。

其中一个合作伙伴要求我们根据他们的数据和规范为其定制应用程序。我们基本上创建了一个Symfony应用程序的新实例,该实例具有数据库表的副本(具有不同的前缀),实体的更改以反映新的数据库表名称以及一些翻译文本更改。

其他合作伙伴似乎也会遵循这种定制实例的趋势。

因此,我正在尝试将核心应用程序更新为Symfony 4,并且尝试使用多个实体管理器和dotenv来区分合作伙伴数据库表,如下所述。

简而言之,我试图使用多个实体管理器按前缀切换数据库表名称。

.env

###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=oci8://user:pass@127.0.0.1:1521/XE
EM_TYPE=OpenAccess
###< doctrine/doctrine-bundle ###

只有在security.yaml中才能正常工作

security:
    encoders:
        App\Entity\%env(EM_TYPE)%\Osoba:

    providers:
        our_db_provider:
            entity:
                class: App\Entity\%env(EM_TYPE)%\Osoba
                property: username

当我尝试在default_entity_manager中获取%env(EM_TYPE)%时,出现错误您已请求不存在的服务“ doctrine.orm。%env(EM_TYPE)%_ entity_manager”。教义。 yaml

parameters:
    env(DATABASE_URL): ''

doctrine:
    dbal:
        default_connection: '%env(EM_TYPE)%'
        connections:
            MeetingTool:
                driver: 'oci8'
                charset:  UTF8

                schema_filter: /^MT_/
                url: '%env(resolve:DATABASE_URL)%'
            OpenAccess:
                driver: 'oci8'
                charset:  UTF8
                schema_filter: /^OA6_/
                url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        default_entity_manager: '%env(EM_TYPE)%'
        entity_managers:
            MeetingTool:
                connection: MeetingTool
                mappings:
                    Main:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/MeetingTool'
                        prefix: 'App\Entity\MeetingTool'
                        alias: App2
            OpenAccess:
                connection: OpenAccess
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity/OpenAccess'
                        prefix: 'App\Entity\OpenAccess'
                        alias: OpenAccess

最大的问题是使用,我如何在此处定位正确的实体?例如loginController.php

<?php

namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\OpenAccess\LogPrihlaseni;
//use App\Entity\MeetingTool\LogPrihlaseni;

class LoginController extends AbstractController {

    private $entityManager;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }

   public function logPrihlaseni() {
        $log = new LogPrihlaseni();

0 个答案:

没有答案