我正在使用Symfony-2来实现我的应用程序
我需要登录和注销路线才能有一些占位符,但我无法在 routing.yml 和 security.yml 文件中很好地定义它。
我希望有类似的东西:
www.mysite.com/{client_slug}/panel
以及其他安全页面:
www.mysite.com/{client_slug}/panel/.*
当有人试图导航到其中一个页面时,他/她应该被重定向到:
www.mysite.com/{client_slug}/login
点击 logout 后,应将用户重定向到以下内容:
www.mysite.com/{client_slug}/goodbye
我尝试了几件事(http://forum.symfony-project.org/viewtopic.php?f=23&t=37809)但是目前我唯一能做的就是在我的登录网址中显示 {client_slug} 文字:
www.mysite.com/my-cliend-slug/panel
重定向到
www.mysite.com/{client_slug}/login
security.yml
firewalls:
main:
pattern: /.*
form_login:
check_path: /login_check
login_path: _security_login
logout:
path: /logout
target: /goodbye
security: true
anonymous: true
的routing.yml
_security_login:
pattern: /{_client_slug}/login
defaults: { _controller: MyAppBackendBundle:Security:login }
_security_check:
pattern: /login_check
_security_logout:
pattern: /logout
_admin_panel:
pattern: /{_client_slug}/panel
defaults: { _controller: MyAppBackendBundle:AdminPanel:index }
有什么想法吗?
答案 0 :(得分:3)
我遇到了完全相同的问题。我已经从这里阅读了所有内容(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,它将在kernel.request事件中调用:
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属性 - 上下文:
public function onKernelRequest(GetResponseEvent $event) {
$clientIdentifier = $event->getRequest()->attributes->get('_client');
$this->router->getContext()->setParameter('_client', $clientIdentifier);
}
它适用于我。
我目前正在使用Symfony 2.2.0-RC3。