我想根据访问者用来访问我的域更改parameters.yml 中的一些parapeters。
其实我只需要改数据库就可以了。如果用户抛出 www.domain1.com,我需要使用数据库 1,但如果他抛出 www.domain2.com,我需要使用相同的代码,但使用数据库 2。
可以吗?
您想要实现的是多租户应用程序。
在配置文件中,您应该为数据库创建两个连接,一个用于包含应用程序共享数据的主数据库,另一个是动态的且用于租户特定数据。
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。
在 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等。