【问题标题】:How to have doctrine dbal in symfony?如何在 symfony 中有学说 dbal?
【发布时间】:2015-02-28 08:57:36
【问题描述】:

由于某些原因,我不希望我的用户编辑 /app/config/config.php 以添加数据库凭据,但在单独的文件中,他们将它们添加为数组,而我的 /app/config/config.php 是 PHP,不是 YAML 也不是 XML,所以如何我可以告诉/app/config/config.php 从另一个文件中获取数据库凭据作为数组吗?

我确实看过一个像这样工作的应用程序,我看到他们使用:

$container->loadFromExtension('doctrine', array(
 'orm' => array(
  'auto_generate_proxy_classes' => false,
  'default_entity_manager' => 'default',
  'entity_managers' => array(
   'default' => array('mappings' => array('MyApp' => array('type' => 'staticphp')), 'class_metadata_factory_name' => 'Doctrine\\ORM\\Mapping\\StaticClassMetadataFactory')
  )
 ),
 'dbal' => array(
  'default_connection' => 'default',
  'connections' => array(
   'default' => array('host' => 'from_user_config.db', 'logging' => true),
   'read' => array('host' => 'from_user_config.db_read', 'logging' => true)
  )
 )
));

由于没有记录,如果您能阐明我如何按照我描述的方式执行此操作,我将不胜感激?

【问题讨论】:

  • 文档中有一些关于它的内容 (symfony.com/doc/current/cookbook/configuration/…)。
  • 谢谢。由于某种原因,setParameter 不适合我的应用程序。如果我创建一个普通的教义引导文件并在 symfony 中使用 import() 该文件,symfony 会以这种方式识别教义引导文件吗?我不希望我的用户编辑 /app/config/config.php 或参数。他们应该只使用 db 凭据编辑一个单独的配置文件,我想将该配置文件注入 symfony /app/config/config.php 文件以及一些原则设置,如代理、缓存、tablePrefix eventListener 等。 symcony 可以吗?

标签: php symfony doctrine-orm dbal


【解决方案1】:

虽然在Qoop提供的文章中有解释,但我必须承认解释有点模糊,所以我将详细说明以防对您有所帮助。

首先,在您的app/config/config.php 中包含以下行。

// app/config/config.php
$loader->import('my_custom_parameters.php');

创建文件my_custom_parameters.php(文档示例,稍后提供我的示例)。

// app/config/my_custom_parameters.php
include_once('/path/to/drupal/sites/default/settings.php');
$container->setParameter('drupal.database.url', $db_url);

在文档的示例中还有另一个导入,以防您希望将设置存储在其他地方。这不是强制性的,如果您愿意,您可以直接在parameters.php 中包含变量。

为简单起见,我将去掉include_once,直接修改凭据。

// app/config/my_custom_parameters.php
$container->setParameter('database_name', 'the_db_I_want');
$container->setParameter('database_user', 'the_user_I_want');
$container->setParameter('database_password', 'the_pass_I_want');

如您所见,您可以覆盖任意数量的参数。

更新

您也可以试试这个(尚未测试但认为可行):

// app/config/my_custom_parameters.php
include_once('/path/to/where/people/can/modify/settings.php');
$container->loadFromExtension('doctrine', array(
 'orm' => array(
  'auto_generate_proxy_classes' => $variable_from_settings_php,
  'default_entity_manager' => $another_variable_from_settins_php,
  'entity_managers' => array(
   'default' => array('mappings' => array('MyApp' => array('type' => 'staticphp')), 'class_metadata_factory_name' => 'Doctrine\\ORM\\Mapping\\StaticClassMetadataFactory')
  )
 ),
 'dbal' => array(
  'default_connection' => 'default',
  'connections' => array(
   'default' => array('host' => 'from_user_config.db', 'logging' => true),
   'read' => array('host' => 'from_user_config.db_read', 'logging' => true)
  )
 )

我正在使用您提供的代码。您可以使用您喜欢的配置。我添加了一些可以从作为参数值导入的文件中加载的虚拟变量,只是为了向您展示,理论上,您可以做类似的事情。

正如您在documentation 中看到的(关于设置 bd 的部分,称为“配置数据库”):

通过 parameters.yml 定义配置只是一个约定。 该文件中定义的参数由 main 引用 设置Doctrine时的配置文件

试一试,如果它有效,请告诉我。

希望它更清楚。

【讨论】:

  • 谢谢。由于某种原因 setParameter 不适合我的应用程序。如果我创建一个普通的教义引导文件并在 symfony 中使用 import() 该文件,symfony 会以这种方式识别教义引导文件吗?我不希望我的用户编辑 /app/config/config.php 或参数。他们应该只使用 db 凭据编辑一个单独的配置文件,我想将该配置文件注入 symfony /app/config/config.php 文件以及一些原则设置,如代理、缓存、tablePrefix eventListener 等。 symcony 可以吗?
  • @user4271704 检查更新,让我知道它是否有效,从未尝试过,我很好奇(我通常使用 yml)
  • 为什么不直接在 /app/config/config.php 中而不是在 parameters.php 中执行所有这些操作,然后在 config.php 中包含 parameters.php?
  • @user4271704 正如您在文档中所读到的,parameters.php 的使用只是一种约定。你可以做任何你认为更适合你的应用的事情,我只是提供想法。
  • 谢谢。将教义引导程序作为服务并在 /config/config.php 中调用该服务怎么样?如果是好主意,我该怎么做?
猜你喜欢
  • 2017-05-03
  • 2016-08-25
  • 2015-03-05
  • 2017-11-24
  • 2012-06-11
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多