重定向页面Symfony

时间:2015-03-22 15:53:06

标签: symfony

程序员,面临这样的问题。在用户授权之后,我想重定向到包含其数据的页面,但是会收到错误。这是代码

firewalls:
    main:
        pattern: /.*
        form_login:
            login_path: /
            check_path: /login_check
            default_target_path:  /user/{id}/show  //How to use the id of my controller. In routing i create it
            always_use_default_target_path: true
            use_referer:        true
        logout:
            path: /logout
            target: /
        security: true
        anonymous: true

1 个答案:

答案 0 :(得分:1)

我假设你想重定向到一个页面并显示登录用户的数据。我建议改用一条非动态路线更直接;例如/user/show

在这种情况下,您不需要路由中的id,因为无论您重定向到哪个路由,您都可以在控制器中获取经过身份验证的用户对象:

class HomeController extends Controller
{
    /**
     * @Route("/user/show", name="user_show")
     * @Template()
     */
    public function userAction()
    {
        // do stuff...
        // send current user object to view
        return [
            'user' => $this->getUser(),
        ];
    }

我认为这是最简单的方法,你已经拥有当前用户的上下文等等 - 我认为你需要一个非常具体的理由在这里使用用户ID - 你可以实现一个登录处理程序,这将允许您可以拦截登录事件并运行一些自定义代码。

为完整起见,您可以按照以下方式执行此操作(未经测试,在此情况下不推荐):

在您的控制器中创建一个名为user/{id}/show的<{1}}操作。

然后,在AppBundle(或同等)捆绑包的user_show中:

services.yml

然后创建一个app.event_listener.login_success_handler: class: AppBundle\EventListener\LoginSuccessHandler arguments: - @router tags: - { name: 'login.handler', channel: 'security' } 类:

AppBundle/EventListener/LoginSuccessHandler.php

这样的事情。这里的目标是你:

  • 拦截登录成功事件
  • 获取经过身份验证的用户
  • 手动重定向

重申一下,我没有测试上面的代码,所以YMMV。在这种情况下,我不认为这种方法是必要的 - 如果您在登录成功时需要一些特定和自定义功能,则登录事件处理程序非常有用。但是,您可以轻松获取控制器中的当前用户上下文,这涵盖了我的经验中的大多数用例。

希望这会有所帮助:)