簡體   English   中英

Symfony:如何在執行早期訪問用戶對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM