Symfony: как получить доступ к объекту пользователя на ранней стадии исполнения - PullRequest
1 голос
/ 26 августа 2010

У меня есть собственный класс маршрутизации, который проверяет управление версиями объекта, чтобы можно было создавать черновые версии страниц, которые не появляются на живом сайте.Когда администратор щелкает для предварительного просмотра черновой версии страницы, мой класс PublishingHelper на внешнем интерфейсе (вызывается из класса маршрутизации) проверяет разрешения пользователя, чтобы узнать, разрешено ли им просматривать черновую версию этой страницы.

Я использую этот код:

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

Но $ user равен NULL.

У кого-нибудь есть идеи?Все мои поиски, кажется, говорят, что это правильный способ получить объект пользователя.

Спасибо,

Том

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

Я думаю, что внедрение таких ограничений было бы проще реализовать в виде фильтра: http://www.symfony -project.org / reference / 1_4 / ru / 12-Filters

0 голосов
/ 26 августа 2010

Спасибо за комментарии Тиль / Джон, мне удалось исправить это сейчас. Исправление фабрики не сработало, потому что при создании экземпляра пользовательского класса ни один из фильтров не работал, поэтому у меня остался бесполезный пользовательский объект.

Я решил свои проблемы, просто взяв практически весь код функции matchUrl () моего пользовательского класса маршрутизации и вставив новую функцию doRouting () в тот же класс. matchUrl () теперь выглядит так:

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 () теперь перенаправляет непосредственно в соответствующий модуль / действие (правильно с учетом прав пользователя).

...