Symfony:路由问题

时间:2017-04-14 13:20:57

标签: symfony routing symfony-routing symfony-3.2

我是Symfony的新手,我遵循一个教程,关于安全性和用户管理的部分,但我遇到了一个似乎来自我的路由的问题。

我刚刚创建了一个实际工作的登录表单,当我继续/app_dev.php/login时,表单显示,我可以填写它,但是当我提交它时,我收到以下错误:

No route found for "GET /" (from "http://dev-05/ANTOINE/Symfony/web/app_dev.php/login")
404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException » 

收到此错误后,如果我返回主页,我可以看到我已连接,所以它正在工作,但重定向不是。

根据文档,这来自可能错误配置的路由,但我不知道我在哪里犯了错误。

这是我的表单,我的security.yml和我的routing.yml文件:

{% extends "AKMUserBundle::layout.html.twig" %}

{% block akmuser_body %}

{% if error %}
    <div class="alert alert-danger">{{ error.message }}</div>
{% endif %}

<form action="{{ path('login_check') }}" method="post">
    <label for="username">Login : </label>
    <input type="text" id="username" name="_username" value="{{ last_username }}" />

    <label for="password">Mot de passe :</label>
    <input type="password" id="password" name="_password" />
    <br />
    <input type="submit" value="Connexion" />
</form>

{% endblock %}

security.yml:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            memory: 
                users:
                    user: { password: userpass, roles: ['ROLE_USER'] }
                    admin: { password: adminpass, roles: ['ROLE_ADMIN'] }

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            form_login:
                login_path: login
                check_path: login_check
            logout:
                path: logout
                target: /platform

routing.yml:

akm_platform:
resource: "@AKMPlatformBundle/Resources/config/routing.yml"
prefix:   /platform

login:
    path: /login
    defaults:
        _controller: AKMUserBundle:Security:login

login_check:
    path: /login_check

logout:
    path: /logout

我知道.yml文件非常敏感,需要4个空格而不是通常的缩进,所以我用行重写了这些文件,但它仍然没有用。

我希望有人可以帮助我:p 如果您需要一些信息,请不要犹豫!

编辑:这是我php bin/console debug:router的结果 php bin/console debug:router

编辑2:为了解决我的问题,我只需在security.yml中添加default_target_path:

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        in_memory:
            memory: 
                users:
                    user: { password: userpass, roles: ['ROLE_USER'] }
                    admin: { password: adminpass, roles: ['ROLE_ADMIN'] }

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            form_login:
                login_path: login
                check_path: login_check
                default_target_path: akm_platform_home
            logout:
                path: logout
                target: /platform

1 个答案:

答案 0 :(得分:1)

刷新你的缓存,控制台命令:php bin/console cache:clear,如果你使用旧的symfony它的app / console而不是bin / console。您可以使用以下命令调试路由:php bin/console debug:router。这是主系统控制台,在我的情况下,我在Windows上使用它。您必须在项目文件夹中才能使用它们。

我不确定你在哪里被重定向到“/”,我最近开始在Symfony工作,大多数问题都是刷新缓存和错误的yml和路由名称。但是在你的情况下,symfony可能是路由/成功登录,你可以添加default_target_path: your_homepage_route_name or /where_you_want_to_go 这可能是这里的问题。

由于您是新手,当您包含路由并为其定义前缀时,您很容易忘记设置它,这就是路由器调试很好的原因,因为您可以非常轻松地查看所有信息。在symfony中工作时,如果不在具有内置控制台的edior中工作,则始终打开控制台窗口。我认为JetBeans拥有它,所有这些教程都在其中完成。对于symfony的PS,youtube教程很棒,例如Symfony和PHP Programming channel有一个很好的初学者教程。