2011-05-23 30 views
1

我想用完全可測性將當前登錄用戶的id注入到Doctrine_Record類的creator_id字段中,而不使用sfContext單例。我發現了幾個Doctrine行爲,如http://www.symfony-project.org/plugins/sfDoctrineActAsSignablePlugin,但是他們在一個偵聽器中訪問sfContext單例,或者在Doctrine_Record的子類的save方法中(我發現另一個例子)。 我想在symfony控制器中找到一個入口點,在這裏我可以注入當前登錄的用戶,並將其保留到請求結束。 我該怎麼辦? 希望我已經清楚了。symfony 1.4 - 將當前登錄用戶注入Doctrine模型

編輯: 作爲@jeremy建議,我做了一個自定義過濾器:

class userFilter extends sfFilter 
{ 
    public function execute($filterChain) 
    { 
    $user = $this->getContext()->getUser(); 
    if ($user->isAuthenticated()) { 
     $guard = $user->getGuardUser(); 
     Doctrine_Manager::getInstance()->setAttribute('logged_in_user', $guard->getId()); 
    } 

    // Execute next filter 
    $filterChain->execute(); 
    } 
} 

所以現在我的測試中,我的任務是sfContext免費的,我只需要設置正確的用戶ID在某一點開始之前與分貝的互動:

Doctrine_Manager::getInstance()->setAttribute('logged_in_user', sfConfig::get('default_user')); 
+0

我在想,當用戶登錄時添加的用戶id作爲Doctrine_Manager實例的PARAM,然後得到帕拉姆回任何地方模型 – giorrrgio 2011-05-23 15:43:12

+0

嗨giorrrgio - 你能再詳細一點嗎?例如在你需要使用sfContext的那一刻? :-) – Flukey 2011-05-23 18:34:16

回答

1

偉大的問題!在任何地方使用sfContext都是Symfony 1的醜陋方面之一,並將其​​設置爲Doctrine_Manager聽起來像是一個堅實的想法。

這可能是最好的做法,無論是在ProjectConfiguration(見下文)發生的configureDoctrine回調。我不是100%的用戶在這一點上,如果不是,你最好的選擇是自定義過濾器(reference)。

public function configureDoctrine(Doctrine_Manager $manager) 
{ 
    $manager->setParam('user_id', sfContext::getInstance()->getUser()->getGuardUser()->getId()); 
} 
0

謝謝你提出這個問題。考慮到這一點,我寫了http://www.symfony-project.org/plugins/sfAuditablePlugin。我基本上將返回userId的方法外化,以便您可以從session,doctrine參數或任何您擁有它的位置獲取userId。 下面是配置返回包含USER_ID和USER_NAME陣列的方法中的設置

# Retrieve User Array from custom implementation 
     # [0] => (int)user_id; [1] => (string)user_name; 
    getUserArray: 
    class_name: Utility 
    static_method_name: getUserAuditArray 
+0

這就是我在找@Prasad,謝謝! – giorrrgio 2011-05-27 13:42:36

+0

我將在幾周內發佈此插件的更新,因此請告知我是否存在錯誤/問題。如果它有效,請在這個答案上標出這個答案並在symfony網站上將自己標識爲一個插件用戶:)謝謝 – Prasad 2011-05-27 14:48:45

相關問題