我正在尝试在项目中设置用户,但由于登录路径,我收到错误。它看起来像空格的问题,但我尝试使用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。
我不知道如何调试它。
答案 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')) {