Symfony中每个请求的不同parameters.yml?

时间:2014-12-12 11:04:07

标签: php symfony

是否可以根据域修改每个请求的parameters.yml

我想在一些网站上使用一个应用程序,它只在数据库连接和分机上有所不同。

有办法使用像parameters.php这样的东西我可以在哪里获得基于域和其他请求参数的应用配置?

如何使用Symfony的缓存?

1 个答案:

答案 0 :(得分:-2)

如果您使用的是教条包,这可能会对您有所帮助。

您应首先在parameters.yml

中定义两个连接
database.com_driver:    'pdo_mysql'
database.com_host:      'com'
database.com_port:      'port'
database.com_name:      'com'
database.com_user:      'com'
database.com_password:  'com'

database.net_driver:    'pdo_mysql'
database.net_host:      'net'
database.net_port:      'port'
database.net_name:      'net'
database.net_user:      'net'
database.net_password:  'net'

然后在config.yml中定义2个dbal连接和2个orm实体管理器:

doctrine:
    dbal:
        connections:
            com:
                driver:   %database.com_driver%
                host:     %database.com_host%
                port:     %database.com_port%
                dbname:   %database.com_name%
                user:     %database.com_user%
                password: %database.com_password%

            net:
                driver:   %database.net_driver%
                host:     %database.net_host%
                port:     %database.net_port%
                dbname:   %database.net_name%
                user:     %database.net_user%
                password: %database.net_password%
    orm:
            com:
                connection: com
            net:
                connection: net

然后,您需要将域传递给控制器​​,服务..并加载正确的实体管理器。

使用控制器的示例:

class DefaultController extends Controller
{
    public function listAction($domain) {
        switch ($domain) {
            case 'com':
            case 'net':
                break;
            default:
                //Handle error
        }
        $doctrine = $this->container->get('doctrine');
        /** @var \Doctrine\ORM\EntityManager $entityManager */
        $entityManager = $doctrine->getManager($domain);
    }
}