Symfony 创建两个不同的登录(模板和重定向)

Symfony 创建两个不同的登录(模板和重定向),symfony,Symfony,我需要创建一个网站的移动版本。因为他们的行为方式不同。我将创建不同的控制器来分离手机/电脑代码。但我不知道如何创建两种不同的登录模板和重定向 我需要创建另一个登录页面以应用不同的设计,如果用户成功登录,则会重定向到domain.com/mobile。如果用户出错,他将重定向到domain.com/mobile/login,而不是domain.com/login 我现在不知道该怎么做。什么是简单的方法 编辑我的防火墙: firewalls: dev: pattern: ^

我需要创建一个网站的移动版本。因为他们的行为方式不同。我将创建不同的控制器来分离手机/电脑代码。但我不知道如何创建两种不同的登录模板和重定向

我需要创建另一个登录页面以应用不同的设计,如果用户成功登录,则会重定向到domain.com/mobile。如果用户出错,他将重定向到domain.com/mobile/login,而不是domain.com/login

我现在不知道该怎么做。什么是简单的方法

编辑我的防火墙:

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: login
            check_path: login_check
            default_target_path: /
        logout:       true
        anonymous:    true
        switch_user:  true
        remember_me:
            key:      "%secret%"
            lifetime: 31536000
            path:     /
            domain:   ~
    mobile:
        pattern: ^/m/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: mobile_login
            check_path: mobile_login_check
            default_target_path: /m/
        logout:       true
        anonymous:    true
        switch_user:  true
        remember_me:
            key:      "%secret%"
            lifetime: 31536000
            path:     /m/
            domain:   ~
解决方案 这是我的解决方案,不确定这是否是最佳解决方案

security.yml

添加一个防火墙,在这里移动

    mobile:
        pattern:  ^/m
        anonymous: ~
        form_login:
            check_path: /m/login_check
            login_path: /m/login
            default_target_path: /m
        logout:
            path:   /m/logout
            target: /

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true
        switch_user:  true
        remember_me:
            key:      "%secret%"
            lifetime: 31536000
            path:     /
            domain:   ~
routing.yml

添加路线

mobile_login:
    pattern:  /m/login
    defaults: { _controller: AcmeUserBundle:Mobile:login  }

mobile_check_special:
    pattern:  /m/login_check

mobile_logout_special:
    pattern:  /m/logout
Acme/UserBundle/MobileController.php

我只是从FOSUserBundle中c/c登录页面

<?php

namespace Acme\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\SecurityContext;

class MobileController extends Controller
{

    public function loginAction(Request $request)
    {
        /** @var $session \Symfony\Component\HttpFoundation\Session\Session */
        $session = $request->getSession();

        // get the error if any (works with forward and redirect -- see below)
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } elseif (null !== $session && $session->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
            $session->remove(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = '';
        }

        if ($error) {
            // TODO: this is a potential security risk (see http://trac.symfony-project.org/ticket/9523)
            $error = $error->getMessage();
        }
        // last username entered by the user
        $lastUsername = (null === $session) ? '' : $session->get(SecurityContext::LAST_USERNAME);

        $csrfToken = $this->container->has('form.csrf_provider')
            ? $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate')
            : null;

        return $this->render('AcmeUserBundle:Mobile:login.html.twig', array(
            'last_username' => $lastUsername,
            'error'         => $error,
            'csrf_token' => $csrfToken,
        ));
    }

完成!已经测试过了,但是当我尝试获取/m/时得到了403,并且解决方案不完整。
<form action="{{ path("mobile_check_special") }}" method="post">
    {% if error %}
        <div class="errors">{{ error|trans([], 'FOSUserBundle') }}</div>
    {% endif %}
    <div class="row">
        <label>Email :</label>
        <input type="text" id="user" placeholder="E-mail" name="_username" value="{{ last_username }}" required="required">
    </div>
    <div class="row">
        <label>Mot de passe :</label>
        <input type="password" id="password" placeholder="Mot de passe" name="_password" required="required">
    </div>
    <div class="row">
        <input type="hidden" name="_csrf_token" value="{{ csrf_token }}">
        <input type="checkbox" checked="checked" style="display:none;" id="remember_me" name="_remember_me" value="on">
        <button class="btn">Connexion</button>
    </div>
</form>