Symfony-2>登录和注销路由与占位符



我使用Symfony-2来实现我的应用程序。
我需要我的登录和注销路由有一些占位符,但我没有设法在路由中定义它。Yml 安全性。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),但目前我唯一实现的是,在我的登录url文本{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 }

任何想法?

我遇到了完全相同的问题。我已经阅读了这里的所有内容(http://forum.symfony-project.org/viewtopic.php?f=23&t=37809),对我来说,它可以与一些额外的行一起工作。

这是我的安全。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_path定义:

login:
    pattern:  /{_client}/login
    defaults: { _controller: GNCApplicationBaseBundle:Security:login }
login_check:
    pattern:  /{_client}/login_check

我做了一个EventListener,它将在内核中被调用。请求事件:

acme.system.client.listener:
        class: AcmeSystemClientBundleEventListenerClientListener
        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,而Firewall的优先级是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。

相关内容

  • 没有找到相关文章

最新更新