2010-08-26 25 views
1

我有檢查對象的版本,允許創造條件,不會出現在直播網站上的網頁版本草案的自定義路由類。當管理員點擊預覽頁面的草稿版本時,前端(由路由類調用)中的PublishingHelper類將檢查用戶的權限,以查看是否允許他們查看此頁面的草稿版本。的Symfony:如何早期訪問用戶對象在執行

我使用這個代碼:

$context = sfContext::getInstance(); 
$user = $context->getUser(); 

但是$用戶爲NULL。

有沒有人有任何想法?我所有的搜索似乎都認爲這是獲取用戶對象的正確方式。

感謝,

湯姆

+0

也許sfContext尚未初始化。你可以看看initialize()和loadFactories()(或類似的)。 – Till 2010-08-26 11:59:17

+0

sfContext被初始化(我使用$ context-> hasInstance()來檢查)。我嘗試了「if($ user === null)$ context-> loadFactories()」,但是它將它發送到遞歸循環中,因此它必須是loadFactories,它將啓動路由進程。 – Tom 2010-08-26 14:19:03

+0

你在使用sfGuard嗎? – jgallant 2010-08-26 14:23:17

回答

0

感謝截至/喬恩的意見,我已經設法現在解決這個問題。工廠修復沒有工作,因爲在實例化用戶類時,沒有任何過濾器已經運行,因此我留下了一個無用的用戶對象。

我解決我的問題,簡單地採取幾乎所有的代碼在我的自定義路由類的matchesUrl()函數,並在一個新的功能doRouting把()在同一個班級。 matchesUrl()現在看起來是這樣的:

public function matchesUrl($url, $context = array()) 
{ 
    if (false === $parameters = parent::matchesUrl($url, $context)) 
    { 
    return false; 
    } 

    $parameters['module'] = 'content'; 
    $parameters['action'] = 'route'; 

    $this->url   = $url; 
    $this->context  = $context; 

    return $parameters; 
} 

和路由延遲到通過我的「內容」模塊/控制器工廠和過濾器後:

class contentActions extends sfActions 
{ 
    public function executeRoute(sfWebRequest $request) 
    { 
    $router = $this->getRoute(); 
    $router->doRouting($router->url, $router->context); 
    } 

而且doRouting()函數現在直接轉發到適當的模塊/操作(正確考慮用戶權限)。