幾天編碼後,我能完全按照我的意願去做,我要分享我的解決方案:
我以在SO這裏找到的一個例子開始,你可以在這裏閱讀這篇文章:
Symfony sfDoctrineGuardPlugin custom login query 它給了我一個想法,我執行了,所以,我創建\ LIB \ Util.class.php,具有的功能,一個用於查詢後臺用戶和另一個用於前端用戶
static public function retrieveCustomer($username, $isActive = true)
{
$query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
->leftJoin('u.Groups g')
->leftJoin('g.Permissions p')
->where('u.username = ?', $username)
->addWhere('u.is_active = ?', $isActive)
->addWhere('g.name = ?', 'customers');
return $query->fetchOne();
}
static public function retrieveAdmin($username, $isActive = true)
{
$query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
->leftJoin('u.Groups g')
->leftJoin('g.Permissions p')
->where('u.username = ?', $username)
->addWhere('u.is_active = ?', $isActive)
->whereIn('g.name', array('administrators','operators'));
return $query->fetchOne();
}
現在,在每個應用程序的app.yml
,我現在覆蓋插件
#Example for apps/backend/config/app.yml
all:
sf_guard_plugin:
retrieve_by_username_callable: Util::retrieveAdmin
直到默認查詢一切都很好,但我開始面對另一個問題,所以我打開一個新的線程: Overwriting isAuthenticated() in symfony在那裏我得到了我的解決方案的最後一步,這是爲每個應用程序設置型動物會話名稱,因此,在每個應用程序的factories.yml
:
#apps\backend\config\factories.yml
storage:
class: sfSessionStorage
param:
session_name: backend
現在所有設置,前端的用戶不能在後端應用程序登錄,反之亦然。
隨時發表評論
雖然,你想出了一個合理的答案。我建議你先分析一下你是否真的需要2個獨立的應用程序。雖然這可能是合乎邏輯的,但您很快會發現在應用程序之間重複使用代碼很困難,但國際化和測試存在一個問題。我發現擁有1個應用程序要容易得多。僅供參考,Symfony2也沒有「應用」的概念。 – Dziamid 2011-04-12 21:56:22