根据使用的域更改parameters.yml(数据库)

问题描述 投票:0回答:3

我想根据访问者用来访问我的域更改parameters.yml 中的一些parapeters。

其实我只需要改数据库就可以了。如果用户抛出 www.domain1.com,我需要使用数据库 1,但如果他抛出 www.domain2.com,我需要使用相同的代码,但使用数据库 2。

可以吗?

php database parameters symfony-3.3
3个回答
0
投票

这就是你的答案。只需使用域等其他参数配置另一个内核即可。但 symfony 说:

不再建议创建具有多个内核的应用程序 交响乐。考虑创建多个小型应用程序。

阅读此文档

之后,您只需在加载器函数中加载您需要的文件,并考虑到该域参数。

希望有帮助

已编辑

您还可以阅读此另一个文档并创建一个新环境。认为这对你来说更好。

希望有帮助!


0
投票

您想要实现的是多租户应用程序。

在配置文件中,您应该为数据库创建两个连接,一个用于包含应用程序共享数据的主数据库,另一个是动态的且用于租户特定数据。

doctrine:
dbal:
    default_connection:       default
    connections:
        default:
            driver:   pdo_mysql
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
        dynamic_conn:
            driver:   pdo_mysql
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   ~
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
    # if using pdo_sqlite as your database driver:
    #   1. add the path in parameters.yml
    #     e.g. database_path: "%kernel.root_dir%/data/data.db3"
    #   2. Uncomment database_path in parameters.yml.dist
    #   3. Uncomment next line:
    #     path:     "%database_path%"

orm:
    default_entity_manager:   default
    auto_generate_proxy_classes: "%kernel.debug%"
    entity_managers:
        default:
            connection:       default
            mappings:
                MyBundle: ~
        dynamic_em:
            connection:       dynamic_conn
            mappings:
                MyBundle: ~

现在您必须设置一个通过监听请求并检查域来动态切换数据库的服务,

我建议您检查此存储库,这是您想要实现的目标的示例https://github.com/uirapuru/multidb


0
投票

在 Symfony 3.4 中我在 AppKernel.php 中制作它

我从 $_Server['HTTP_HOST'] 读取域/子域,然后

    $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');

    if($subdomain && file_exists($this->getRootDir().'/config/database_'.$subdomain.'.yml')){
        $loader->load($this->getRootDir().'/config/database_'.$subdomain.'.yml');
    } elseif($subdomain or ($this->getEnvironment() == 'prod' or $this->getEnvironment() == 'dev')) { //php_sapi_name() == "cli"
        $loader->load($this->getRootDir().'/config/database_default.yml');
    }

在配置目录中,我有文件database_domain1.yml,database_domain2.yml等。

© www.soinside.com 2019 - 2024. All rights reserved.