1

我对 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

路由.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 %}

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

4

2 回答 2

0

我想我刚刚修好了。

当我从 routing.yml 中删除“EventBundle”前缀时,它起作用了。

像这样:

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

login_check:
 pattern: /login_check

logout:
 pattern: /logout
于 2013-08-22T01:46:52.963 回答
0

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

而不是这个:

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

应该是这样的:

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

树枝路径功能需要路由名称来生成正确的 URL。

于 2015-05-03T21:08:33.980 回答