在单独的 Symfony2 捆绑包中具有不同的表前缀



我目前有两个单独的捆绑包,一个用于使用 oauth2 对传入连接进行身份验证,另一个用于管理 api/rest 调用。

我希望与每个捆绑包关联的不同表可以根据捆绑包有自己的前缀。例如,第一个捆绑包有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="MYBUNDLESubscriberTablePrefixSubscriber">
    <argument>%MYBUNDLE.db.table_prefix%</argument>
    <tag name="doctrine.event_subscriber"/>
</service>

<service id="MYBUNDLE.tblprefix_subscriber" class="MYBUNDLESubscriberTablePrefixSubscriber">
    <argument>%MYBUNDLE.db.table_prefix%</argument>
    <tag name="doctrine.event_subscriber"/>
</service>

但是,如果我执行控制台命令来创建/更新原则架构,它只使用api_前缀,但没有对所有表使用oauth。

订阅者如下所示:

<?php
namespace MYBUNDLESubscriber;
use DoctrineORMEventLoadClassMetadataEventArgs;
class TablePrefixSubscriber implements DoctrineCommonEventSubscriber
{
    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'] == DoctrineORMMappingClassMetadataInfo::MANY_TO_MANY
                  && isset($classMetadata->associationMappings[$fieldName]['joinTable']['name'])) {
                    $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
                    $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
                }
            }
        }
    }
}

那么,是否可以有不同的前缀?我认为这是可能的,但我能够做到...

提前谢谢你...

问题似乎是两个前缀共享相同的参数键,第二个匹配项覆盖了第一个。我想你必须使用两个键,比如MYBUNDLE.db.table_prefix_oauth和MYBUNDLE.db.table_prefix_api。

相关内容

  • 没有找到相关文章