Спасибо за комментарии Тиль / Джон, мне удалось исправить это сейчас. Исправление фабрики не сработало, потому что при создании экземпляра пользовательского класса ни один из фильтров не работал, поэтому у меня остался бесполезный пользовательский объект.
Я решил свои проблемы, просто взяв практически весь код функции 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 () теперь перенаправляет непосредственно в соответствующий модуль / действие (правильно с учетом прав пользователя).