2012-12-24 49 views
0

我正在构建登录表单,如symfony 2.1文档中所示。我正在做同样的事情。 我在简单授权中获得成功,但是当我创建简单登录表单时,我找不到login_check路由。 如果我把login_check路线,那么我得到login_check错误。
文档对此没有提及。 我security.yml是Symfony 2.1安全登录检查错误

# app/config/security.yml 
security: 
    providers: 
    in_memory: 
     memory: 
      users: 
       ryan: { password: ryanpass, roles: 'ROLE_USER' } 
       admin: { password: kitten, roles: 'ROLE_ADMIN' } 

firewalls: 
    login: 
     pattern: ^/login$ 
     security: false 
    secured_area: 
     pattern: ^/admin 
     anonymous: false 
     form_login: 
      login_path: /login 
      check_path: /login_check 
      always_use_default_target_path: false 
      default_target_path:   /admin/content/index 
      target_path_parameter:   _target_path 
      use_referer:     false 
      username_parameter:    _username 
      password_parameter:    _password 
      csrf_parameter:     login[_token] 
     logout: 
      path: /admin/logout 
      target: /login 
access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 

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

和使用routing.yml是

login: 
pattern: /login 
defaults: { _controller: AcmeTaskBundle:Default:login} 

login_check: 
pattern: /login_check   
defaults: { _controller: AcmeTaskBundle:Default:loginCheck} 

logout: 
pattern: /admin/logout 
defaults: { _controller: AcmeTaskBundle:Default:logout} 
content_index: 
pattern: /admin/content/index 
defaults: { _controller: AcmeTaskBundle:Default:index } 

我控制器登录动作

namespace Acme\TaskBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Acme\TaskBundle\Entity\Product; 
use Acme\TaskBundle\Entity\CmsContentMst; 
use Acme\TaskBundle\Entity\CmsSectionsMst; 

// use Acme\TaskBundle\Entity\ProductType; 
use Symfony\Component\HttpFoundation\Response; 
use Acme\TaskBundle\Form\Type\AddContent; 
use Symfony\Component\Security\Core\SecurityContext; 

class DefaultController extends Controller 
{ 
public function loginAction() 
{ 
    $request = $this->getRequest(); 
    $session = $request->getSession(); 

    // get the login error if there is one 
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(
      SecurityContext::AUTHENTICATION_ERROR 
     ); 
    } else { 
     $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
     $session->remove(SecurityContext::AUTHENTICATION_ERROR); 
    } 

    return $this->render(
     'AcmeTaskBundle:Default:login.html.twig', 
     array(
      // last username entered by the user 
      'last_username' => $session->get(SecurityContext::LAST_USERNAME), 
      'error'   => $error, 
     ) 
    ); 
    } 
public function panelAction(Request $request) 
{ 

} 
public function loginCheckAction() 
    { 

    return new Response('true'); 

    } 

和login.html.twig是

{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #} 
{% if error %} 
    <div>{{ error.message }}</div> 
{% endif %} 

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

<label for="password">Password:</label> 
<input type="password" id="password" name="_password" /> 

{# 
    If you want to control the URL the user is redirected to on success (more details  below) 
    <input type="hidden" name="_target_path" value="/account" /> 
    #} 

<button type="submit">login</button> 
</form> 

我应该如何登录c heck.controller ......如果有人在symfony的2.1完成登录例如PLZ把它放在答案..

+1

请参阅http://stackoverflow.com/questions/13997233/unable-to-find-该控制器的路径登录检查/ 13997744#13997744你的login_check不应该指向任何控制器,应该是防火墙模式内的路径。它是安全系统内部使用的路径,但也必须定义为路由,因此我们可以使用“路径”函数作为例子 – l3l0

回答