Php Symfony:Request$Request对象在特定函数中不工作
我是Symfony的初学者&在这个问题上浪费了很多时间 我试图从同一类的另一个函数调用函数Php Symfony:Request$Request对象在特定函数中不工作,php,symfony,symfony-3.3,Php,Symfony,Symfony 3.3,我是Symfony的初学者&在这个问题上浪费了很多时间 我试图从同一类的另一个函数调用函数isLoggedIn。在isLoggedIn函数中,我需要获取/检查会话变量并返回该变量的值。但是Request$Request对象在isLoggedIn函数中是不可访问的,而Request对象在同一类的其他函数中运行良好 我的代码: <?php namespace AppBundle\Controller; use Sensio\Bundle\FrameworkExtraBundle\Confi
isLoggedIn
。在isLoggedIn
函数中,我需要获取/检查会话变量并返回该变量的值。但是Request$Request
对象在isLoggedIn
函数中是不可访问的,而Request对象在同一类的其他函数中运行良好
我的代码:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use AppBundle\Entity\Users;
class DefaultController extends Controller
{
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$Authuser = $this->isLoggedIn();
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
'Authuser' => $Authuser
]);
}
public function isLoggedIn(Request $request) ////GETTING ERROR IN THIS LINE////
{
$session = $request->getSession();
if($session->get('Authuser')!=null) $Authuser = $session->get('Authuser');
else $Authuser = null;
return $Authuser;
}
/**
* @Route("/logout", name="logout")
*/
public function logoutAction(Request $request)
{
$session = $request->getSession();
$session->remove('user_id');
return $this->redirectToRoute('homepage');
}
}
?>
我得到的确切错误:
未捕获的PHP异常
Symfony\Component\Debug\Exception\ContextErrorException:“可捕获
致命错误:参数1传递给
AppBundle\Controller\DefaultController::isLoggedIn()必须是
Symfony\Component\HttpFoundation\Request的实例,未给出任何实例,
叫来
/Applications/MAMP/htdocs/srfood/src/AppBundle/Controller/DefaultController.php
在第21行,并定义了“
我搜索了很多,但没有找到解决方案,而且我需要知道根据Symfony,isLoggedIn
函数与同一类的其他函数有什么不同,因为我尝试向函数添加路由、添加操作后缀等,使其行为与其他函数类似,但我就是不明白这个函数对symfony有什么不同?!谢谢
PS-我正在使用Symfony 3.3。您不能在控制器中声明非操作函数的请求参数。 尝试在带有$request参数的操作中调用isLoggedIn,而不在函数定义中声明它
希望它能帮助您。您不能在控制器中声明非操作函数的请求参数。 尝试在带有$request参数的操作中调用isLoggedIn,而不在函数定义中声明它
希望它能帮助您。$Authuser=$this->isLoggedIn($request);虽然使用Symfony安全包可能会更好,但您应该做到这一点。控制器操作工作的原因是框架花费额外的精力分析操作和注入依赖项,如$request对象。常规方法(如名称不正确的isLoggedIn)不会被处理。@Cerad谢谢!是的,它成功了&就是这样。但是,如果有人不使用Symfony安全包,是否有合适的解决方案?我是一个初学者,虽然我做了很多尝试,但是安全包飞到了我的头上,无法正确理解它的用法,因此使用传统的方法。您的方法将起作用。虽然安全捆绑包很复杂,但如果您按照文档中的示例进行操作,情况还不错。尤其是当你最终想要使用角色之类的时候。$Authuser=$this->isLoggedIn($request);虽然使用Symfony安全包可能会更好,但您应该做到这一点。控制器操作工作的原因是框架花费额外的精力分析操作和注入依赖项,如$request对象。常规方法(如名称不正确的isLoggedIn)不会被处理。@Cerad谢谢!是的,它成功了&就是这样。但是,如果有人不使用Symfony安全包,是否有合适的解决方案?我是一个初学者,虽然我做了很多尝试,但是安全包飞到了我的头上,无法正确理解它的用法,因此使用传统的方法。您的方法将起作用。虽然安全捆绑包很复杂,但如果您按照文档中的示例进行操作,情况还不错。特别是如果你最终想要使用角色之类的。谢谢你,尽管我通过@Cerad在他的评论中建议的技巧解决了这个问题,即在函数调用时传递$request,比如
$Authuser=$this->isLoggedIn($request)代码>,它完成了任务。谢谢,尽管我通过他评论中建议的@Cerad技巧解决了这个问题,即在函数调用时传递$request,比如$Authuser=$this->isLoggedIn($request)代码>,它完成了任务。