我有一个自定义路由类,用于检查对象的版本控制,以允许创建不会在实际站点上显示的页面草稿版本。当管理员单击以预览页面的草稿版本时,前端的PublishingHelper类(从路由类调用)会检查用户的权限,以查看是否允许他们查看此页面的草稿版本。
我正在使用此代码:
$context = sfContext::getInstance();
$user = $context->getUser();
但是$ user是NULL。
有没有人有任何想法?我的所有搜索似乎都说这是获取用户对象的正确方法。
谢谢,
汤姆
答案 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