2014-03-05 40 views
0

我目前有兩個獨立的bundle,一個使用oauth2驗證傳入連接,另一個bundle用於管理api/rest調用。在單獨的Symfony2 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> 

and

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

但如果我執行控制檯命令來創建/更新主義模式,它只是使用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; 
       } 
      } 
     } 
    } 
} 

那麼,是不是可以有不同的前綴?我認爲這是可能的,但我能做到這一點...

預先感謝您...

回答

-1

這個問題似乎是兩個前綴共享相同的參數鍵,與第二occurence覆蓋第一。 我想你必須使用兩個鍵,比如MYBUNDLE.db.table_prefix_oauth和MYBUNDLE.db.table_prefix_api。

+0

謝謝,那就是問題所在。除此之外,我爲每個服務使用不同的TablePrefix訂戶。我不知道任何其他方式來設置不同的表前綴。 – luis83rs

相關問題