Symfony2:登录检查和注释

Symfony2:登录检查和注释,symfony,login,annotations,Symfony,Login,Annotations,在我的symfony项目中,我想使用身份验证。 所以我在security.yml文件中写了这个 firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false default: anonymous: ~ login_firewall: pattern: ^/lo

在我的symfony项目中,我想使用身份验证。 所以我在security.yml文件中写了这个

firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false default: anonymous: ~ login_firewall: pattern: ^/login$ anonymous: ~ secured_area: pattern: ^/ anonymous: ~ form_login: login_path: /login check_path: /login_check post_only: true always_use_default_target_path: true default_target_path: / use_referer: false username_parameter: username password_parameter: password intention: authenticate logout: path: /logout target: / 防火墙: 开发人员: 模式:^/((探查器wdt)| css |图像| js)/ 安全性:错误 违约: 匿名:~ 登录防火墙: 模式:^/登录$ 匿名:~ 安全区: 模式:^/ 匿名:~ 表格(u)登入: 登录路径:/login 检查路径:/login\u检查 post_only:正确 始终\u使用\u默认\u目标\u路径:true 默认\u目标\u路径:/ 使用\u referer:false username\u参数:username password\u参数:password 目的:验证 注销: 路径:/logout 目标:/ 好的,现在文档中说我需要在routing.yml中添加以下内容:

login: pattern: /login defaults: { _controller: AcmeSecurityBundle:Security:login } login_check: pattern: /login_check 登录: 模式:/login 默认值:{u控制器:AcmeSecurityBundle:Security:login} 登录检查: 模式:/login\u检查 但我使用的是注释,所以我不使用路由文件。相反,我有:

/** * @Route("/login") * @Template() */ 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 array( // last username entered by the user 'last_username' => $session->get(SecurityContext::LAST_USERNAME), 'error' => $error, ); } /** *@Route(“/login”) *@Template() */ 公共函数登录() { $request=$this->getRequest(); $session=$request->getSession(); //如果存在登录错误,则获取登录错误 如果($request->attributes->has(SecurityContext::AUTHENTICATION\u ERROR)){ $error=$request->attributes->get(SecurityContext::AUTHENTICATION\u错误); }否则{ $error=$session->get(SecurityContext::AUTHENTICATION\u错误); $session->remove(SecurityContext::AUTHENTICATION\u错误); } 返回数组( //用户最后输入的用户名 'last_username'=>$session->get(SecurityContext::last_username), 'error'=>$error, ); } 如果我什么也不做,我的登录页面会出错:

"Unable to generate a URL for the named route "login_check" as such route does not exist." 无法为命名路由“登录检查”生成URL,因为该路由不存在 如果我在控制器中添加一个响应为空的操作,则。。。没什么


我做错了什么?

登录检查
或任何您指定的是系统定义的路由,而不是操作。这意味着您不能/不应该/不会在控制器中手动定义它。;)

我自己使用
annotations
进行路由,但无论如何,您将使用
routing.yml
从控制器内部导入控制器,从而导入带注释的路由


所以,继续,只需在
routing.yml
中定义该路由,它应该可以工作。

登录检查
或任何您指定的是系统定义的路由,而不是操作。这意味着您不能/不应该/不会在控制器中手动定义它。;)

我自己使用
annotations
进行路由,但无论如何,您将使用
routing.yml
从控制器内部导入控制器,从而导入带注释的路由


所以,继续,只需在
routing.yml
中定义该路由,它应该可以工作。

登录检查
或任何您指定的是系统定义的路由,而不是操作。这意味着您不能/不应该/不会在控制器中手动定义它。;)

我自己使用
annotations
进行路由,但无论如何,您将使用
routing.yml
从控制器内部导入控制器,从而导入带注释的路由


所以,继续,只需在
routing.yml
中定义该路由,它应该可以工作。

登录检查
或任何您指定的是系统定义的路由,而不是操作。这意味着您不能/不应该/不会在控制器中手动定义它。;)

我自己使用
annotations
进行路由,但无论如何,您将使用
routing.yml
从控制器内部导入控制器,从而导入带注释的路由


因此,请继续,只需在
routing.yml
中定义该路由,它应该可以工作。

当我这样做时,我有一个错误:找不到路径“/login\u check”的控制器。也许你忘了在路由配置中添加匹配的路由?就是说
无法生成URL
,对吗?这可能是防火墙之间的冲突吗?我看到你还有
login\u firewall
,我认为它与
secured\u area
firewall重叠,就是这样!谢谢!很好,很高兴提供帮助:)当我执行此操作时,出现以下错误:无法找到路径“/login\u check”的控制器。也许你忘了在路由配置中添加匹配的路由?就是说
无法生成URL
,对吗?这可能是防火墙之间的冲突吗?我看到你还有
login\u firewall
,我认为它与
secured\u area
firewall重叠,就是这样!谢谢!很好,很高兴提供帮助:)当我执行此操作时,出现以下错误:无法找到路径“/login\u check”的控制器。也许你忘了在路由配置中添加匹配的路由?就是说
无法生成URL
,对吗?这可能是防火墙之间的冲突吗?我看到你还有
login\u firewall
,我认为它与
secured\u area
firewall重叠,就是这样!谢谢!很好,很高兴提供帮助:)当我执行此操作时,出现以下错误:无法找到路径“/login\u check”的控制器。也许你忘了在路由配置中添加匹配的路由?就是说
无法生成URL
,对吗?这可能是防火墙之间的冲突吗?我看到你还有
login\u firewall
,我认为它与
secured\u area
firewall重叠,就是这样!谢谢!太好了,很乐意帮忙:)