设置登录路径时在Symfony中出现问题

时间:2016-01-03 23:19:41

标签: php symfony login

我正在尝试在项目中设置用户,但由于登录路径,我收到错误。它看起来像空格的问题,但我尝试使用php文件,错误是一样的。

  

FileLoaderLoadException:路由文件   “/Applications/MAMP/htdocs/Symfony/app/config/routing.yml”包含   “login”不支持的键:“pattern”。预期的一个:“资源”,   “type”,“prefix”,“path”,“host”,“scheme”,“methods”,“defaults”,   “要求”,“选项”,“条件”   /Applications/MAMP/htdocs/Symfony/app/config/routing.yml(这是   从...进口   “/Applications/MAMP/htdocs/Symfony/app/config/routing_dev.yml”)。

app / config中的代码是:

login:
    pattern:    /login
    defaults:   { _controller: OCUserBundle:Security:login }

编辑:
所以我对一个新项目也犯了同样的错误 这就是我在做什么:
- 在我的项目命名空间“Me”中创建2个捆绑包(MGeneralBundle,MUserBundle)。
- 在app / config / routing.yml:

me_m_general:
    resource: "@MeMGeneralBundle/Resources/config/routing.yml"
    prefix:   /

login:
     path:   /login
     defaults: { _controller: MeMUserBundle:Security:login}

login_check:
    path:    /login_check

logout:
    path:    /logout

在app / config / security.yml中:

security:
    in_memory:
        memory: ~
firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main_login:
    # Cette expression régulière permet de prendre /login (mais pas /login_check !)
        pattern:   ^/login$
        anonymous: true
    main:
        pattern:   ^/
        anonymous: false
        provider:  in_memory
        form_login:
            login_path: login
            check_path: login_check
        logout:
            path:   logout
            target: /

用于登录的控制器,在UserBundle中使用routing.yml:

me_home:
    path:     /
    defaults: { _controller: MeMUserBundle:Default:index }



<?php

namespace Me\MUserBundle\Controller;

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

class SecurityController extends Controller
{
    public function loginAction(Request $request)
    {
      if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
        return $this->redirectToRoute('me_home');
      }
      $authenticationUtils = $this->get('security.authentication_utils');
      return $this->render('MeMUserBundle:Security:login.html.twig', array(
        'last_username' => $authenticationUtils->getLastUsername(),
        'error'         => $authenticationUtils->getLastAuthenticationError(),
      ));
    }
}

错误是:

  

您已请求不存在的服务“security.context”。

at:http://localhost:8888/Me/web/app_dev.php/login

我不知道如何调试它。

1 个答案:

答案 0 :(得分:0)

security.context服务was deprecated in 2.6并在3.0中完全删除。您想要使用security.authorization_checker代替:

 if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {

事实上,Symfony 2.6也introduced new controller shortcuts,所以你甚至不必明确地调用该服务。这看起来更干净,并且在您的控制器中也能正常工作:

if ($this->isGranted('IS_AUTHENTICATED_REMEMBERED')) {