[英]Symfony: How to access the user object early in execution
我有一個自定義的路由類,用於檢查對象的版本,以允許創建不會出現在實時站點上的頁面的草稿版本。 當管理員單擊以預覽頁面的草稿版本時,前端的PublishingHelper類(從路由類調用)會檢查用戶的權限,以查看是否允許他們查看此頁面的草稿版本。
我正在使用此代碼:
$context = sfContext::getInstance();
$user = $context->getUser();
但是$ user為NULL。
有人有什么想法嗎? 我所有的搜索似乎都說這是獲取用戶對象的正確方法。
謝謝,
湯姆
感謝Till / Jon的評論,Ive現在設法解決了這個問題。 工廠修復無法正常工作,因為在實例化用戶類時,沒有任何過濾器運行,因此我剩下了一個無用的用戶對象。
通過簡單地將定制路由類的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()函數直接轉發到適當的模塊/操作(正確考慮了用戶權限)。
我認為實施這樣的限制將更易於實現為過濾器: http : //www.symfony-project.org/reference/1_4/en/12-Filters
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.