Symfony2:路由“login_check”不存在

时间:2013-08-22 00:55:43

标签: symfony login routing

我是Symfony的新手,我正在尝试使用数据库中的用户创建登录表单。

到目前为止,我知道我必须将login_check放在防火墙后面,而不是为它创建一个控制器,但我仍然会收到此错误:

An exception has been thrown during the rendering of a template ("Route "login_check" does not exist.") in EventBundle:Security:login.html.twig at line 11.

我的security.yml:

jms_security_extra:
secure_all_services: false
expressions: true

security:
  encoders:
    SocialGeo\EventBundle\Entity\User:
      algorithm: sha512
      encode-as-base64: true
      iterations: 10

  role_hierarchy:
    ROLE_USER: ROLE_USER
    ROLE_DISTRICTWORKER: ROLE_USER
    ROLE_CITYWORKER: ROLE_DISTRICTWORKER
    ROLE_ADMIN: ROLE_CITYWORKER
    ROLE_SUPERADMIN: ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH

  providers:
    administrators:
      entity: { class: SocialGeo\EventBundle\Entity\User, property: username }

  firewalls:
    main:
      pattern: /.*
      form_login: 
        login_path: /login
        check_path: /login_check
        remember_me: true
      logout:
        path: /logout
        target: /
      security: true
      anonymous: true

的routing.yml:

EventBundle_login:
  pattern: /login
  defaults: { _controller: EventBundle:Security:login }
  requirements:
    _method: GET|POST

EventBundle_login_check:
  pattern: /login_check

EventBundle_logout:
  pattern: /logout

我的树枝模板:

{% extends 'EventBundle::layout.html.twig' %}

{% block title %}Login{% endblock %}

{% block body %}

{% if error %}
<div>{{ error.message }}</div>
{% endif %}

<form action="{{ path('login_check') }}" method="post">
    <label for="username">Username</label>
    <input id="username" type="text" name="_username" value="{{ last_username }}" />
    <label for="password">Password</label>
    <input id="password" type="password" name="_password" />
    <input type="submit" name="login" />
</form>

{% endblock %}

有谁知道我为什么会收到这个错误?

2 个答案:

答案 0 :(得分:0)

我想我刚修好了。

当我从routing.yml中删除'EventBundle'前缀时,它有效。

像这样:

login:
 pattern: /login
 defaults: { _controller: EventBundle:Security:login }
 requirements:
   _method: GET|POST

login_check:
 pattern: /login_check

logout:
 pattern: /logout

答案 1 :(得分:0)

这是旧的,但只是让每个人都知道这里发生了什么,改变路线名称,因为这个人已经完成了工作。但是,原始路线名称也会起作用。

而不是:

<form action="{{ path('login_check') }}" method="post">

应该是这样的:

<form action="{{ path('EventBundle_login_check') }}" method="post">

twig path函数需要路由名称来生成正确的URL。

相关问题