Symfony:如何在执行早期访问用户对象

时间:2010-08-26 09:09:30

标签: php routing symfony1 publishing

我有一个自定义路由类,用于检查对象的版本控制,以允许创建不会在实际站点上显示的页面草稿版本。当管理员单击以预览页面的草稿版本时,前端的PublishingHelper类(从路由类调用)会检查用户的权限,以查看是否允许他们查看此页面的草稿版本。

我正在使用此代码:

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

但是$ user是NULL。

有没有人有任何想法?我的所有搜索似乎都说这是获取用户对象的正确方法。

谢谢,

汤姆

2 个答案:

答案 0 :(得分:0)

感谢Till / Jon的评论,我现在设法解决了这个问题。工厂修复没有工作,因为在实例化用户类时,没有任何过滤器运行,因此我留下了无用的用户对象。

我只是通过自定义路由类的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()函数现在直接转发到相应的模块/操作(正确考虑用户权限)。

答案 1 :(得分:0)

我认为实施这样的限制会更容易实现过滤:http://www.symfony-project.org/reference/1_4/en/12-Filters