我正在構建一個自定義插件,它包含我試圖與插件緊密結合的模式。例如,我有一個引用'store-rw-user'連接的插件/ userPlugin/config/doctrine/schema.yml。我的目標是強制項目的databases.yml包含'store-rw-user'的連接,這樣項目將負責設置單獨的用戶連接。Symfony 1.4 - Doctrine - 自定義插件 - 未知連接
但是,當我嘗試訪問與插件相關的代碼時,我總是得到:Doctrine_Manager_Exception Unknown connection: store-rw-user
。
這裏是插件模式文件的相關片段:
# plugins/userPlugin/config/doctrine/schema.yml
connection: store-rw-user
User:
tableName: user
actAs: [Timestampable]
這裏是BaseUser.class.php(做一個模型構建時產生)的相關片段:
<?php
// lib/model/doctrine/userPlugin/base/BaseUser.class.php
// Connection Component Binding
Doctrine_Manager::getInstance()->bindComponent('User', 'store-rw-user');
....
最後項目的databases.yml裏文件的相關片段:
# config/databases.yml
all:
store-rw-user:
class: sfDoctrineDatabase
param:
....
從一開始,一切看起來配置正確。插件schema.yml導致基類綁定正確的數據庫連接,該連接存在於項目的databases.yml文件中。但是,我遇到了上述問題。在我開始嘗試通過插件initialize()方法手動操作doctrine連接管理器之前,我想知道是否有另一種解決此問題的方法。
- 更新 -
經過進一步調查,看來sfDatabaseManager知道'存儲-RW-用戶的連接,但是,Doctrine_Manager不是。起初我以爲這可能是由於我在主項目配置文件中添加插件的順序,但它隻影響sfDatabaseManager是否具有連接意識,但爲了完整起見,這裏是項目配置文件的片段:
// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
....
public function setup()
{
....
$this->enablePlugins(
array(
'sfDoctrinePlugin',
'userPlugin'
)
);
}
}
而就在如此重要的情況下,這裏是爲userPlugin的app.yml:
# plugins/userPlugin/config/app.yml
# This entry was needed so build-model was executed, the plugin schema file would be pulled in for build as well
all:
userPlugin:
config_dir: %SF_PLUGINS_DIR%/userPlugin/config
recursive: true
這裏是代碼的混亂段,在那裏我有機會獲得「商店RW-用戶通過sfDatabaseManager連接,但不是Doctrine_Manager,這是一個問題,因爲錯誤是從Doctrine_Manager引發的,而不是sfDatabaseMana GER:
// plugins/userPlugin/config/userPluginConfiguration.class.php
class userPluginConfiguration extends sfPluginConfiguration
{
public function initialize()
{
parent::initialize();
var_dump(Doctrine_Manager::getInstance()->getConnections());
$config = ProjectConfiguration::getActive();
$manager = new sfDatabaseManager($config);
var_dump($manager->getDatabase('store-rw-user'));
exit;
}
}
而且結果:
array (size=0)
empty
object(sfDoctrineDatabase)[53]
protected '_doctrineConnection' =>
object(Doctrine_Connection_Mysql)[55]
protected 'driverName' => string 'Mysql' (length=5)
protected 'dbh' => null
protected 'tables' =>
array (size=0)
empty
protected '_name' => string 'store-rw-user' (length=13)
....
不知道發生了什麼事,試圖尋找其他的插件,看看他們如何應對,他們沒有任何數據庫引用,我能找到。
您的databases.yml中沒有縮進錯誤:'store-rw-user'與'class'位於同一級別。這是你的問題或你的databases.yml錯字嗎? – j0k
良好的捕獲,這只是在問題上格式不正確,databases.yml正確隔開。 –