我目前有两个独立的捆绑包,一个用于使用oauth2验证传入连接,另一个捆绑包用于管理api / rest调用。
我希望与每个bundle关联的不同表可以根据bundle拥有自己的前缀。例如,第一个包的oauth_和另一个包的api_。
两个服务配置文件都是正确的(我猜),每一个都指定一个不同的前缀:
<parameter key="MYBUNDLE.db.table_prefix" type="string" >oauth_</parameter>
和
<parameter key="MYBUNDLE.db.table_prefix" type="string" >api_</parameter>
每个捆绑包还有其服务条目:
<service id="MYBUNDLE.tblprefix_subscriber" class="MYBUNDLE\Subscriber\TablePrefixSubscriber">
<argument>%MYBUNDLE.db.table_prefix%</argument>
<tag name="doctrine.event_subscriber"/>
</service>
和
<service id="MYBUNDLE.tblprefix_subscriber" class="MYBUNDLE\Subscriber\TablePrefixSubscriber">
<argument>%MYBUNDLE.db.table_prefix%</argument>
<tag name="doctrine.event_subscriber"/>
</service>
但是如果我执行console命令来创建/更新doctrine架构,它只对所有表使用 api _ 前缀,但不使用oauth。
订阅者看起来像这样:
<?php
namespace MYBUNDLE\Subscriber;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
class TablePrefixSubscriber implements \Doctrine\Common\EventSubscriber
{
protected $prefix = '';
public function __construct($prefix)
{
$this->prefix = (string) $prefix;
}
public function getSubscribedEvents()
{
return array('loadClassMetadata');
}
public function loadClassMetadata(LoadClassMetadataEventArgs $args)
{
$classMetadata = $args->getClassMetadata();
// Do not re-apply the prefix in an inheritance hierarchy.
if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
return;
}
if (FALSE !== strpos($classMetadata->namespace, 'ApiBundle') || FALSE !== strpos($classMetadata->namespace, 'AuthBundle')) {
$classMetadata->setPrimaryTable(array('name' => $this->prefix . $classMetadata->getTableName()));
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY
&& isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) {
$mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
}
}
}
}
}
那么,是否可以使用不同的前缀?我认为这是可能的,但我能够做到......
提前谢谢你......
答案 0 :(得分:-1)
问题似乎是两个前缀共享相同的参数键,第二个出现时覆盖第一个。 我想你必须使用两个键,比如MYBUNDLE.db.table_prefix_oauth和MYBUNDLE.db.table_prefix_api。