У меня была точно такая же проблема.Я прочитал все здесь (http://forum.symfony -project.org / viewtopic.php? F = 23 & t = 37809 ), и для меня это работает с несколькими дополнительными строками.
Вот мой security.yml
login_area:
pattern: ^/[A-Za-z0-9\-\_]+/login$
anonymous: ~
secured_area:
pattern: ^/[A-Za-z0-9\-\_]+/.*
form_login:
login_path: login
check_path: login_check
logout:
path: logout
target: /
remember_me:
key: "%secret%"
lifetime: 31536000
path: /
domain: ~
Определения login и login_path:
login:
pattern: /{_client}/login
defaults: { _controller: GNCApplicationBaseBundle:Security:login }
login_check:
pattern: /{_client}/login_check
И я создал EventListener, который будет вызываться в ядре.событие запроса:
acme.system.client.listener:
class: Acme\System\ClientBundle\EventListener\ClientListener
arguments: [@router, @doctrine.orm.entity_manager]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 10 }
Важным атрибутом является приоритет.В документации Symfony (http://symfony.com/doc/current/reference/dic_tags.html#kernel-event-listener) показано, что RouterListener запускается с приоритетом 32, а брандмауэр на уровне 8. Поэтому я решил вызвать свой собственный EventListener прямо перед брандмауэром и установить атрибут _client вручную в маршрутизаторе-context:
public function onKernelRequest(GetResponseEvent $event) {
$clientIdentifier = $event->getRequest()->attributes->get('_client');
$this->router->getContext()->setParameter('_client', $clientIdentifier);
}
И у меня это хорошо работает.
В настоящее время я использую Symfony 2.2.0-RC3.