【发布时间】:2017-09-28 23:30:28
【问题描述】:
我是 Symfony 的初学者,在这个问题上浪费了很多时间。
我正在尝试从同一类的另一个函数调用函数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 函数与同一类的其他函数有什么不同,因为我尝试向函数添加路由,添加 Action 后缀等等等等,这样它的行为就像其他函数一样,但我就是不明白这个函数对于 symfony 有什么不同?!谢谢!
PS- 我使用的是 Symfony 3.3。
【问题讨论】:
-
$Authuser = $this->isLoggedIn($request);应该可以解决问题,尽管使用 Symfony 安全包可能会更好。控制器动作起作用的原因是框架花费了额外的精力来分析动作并注入像 $request 对象这样的依赖项。不处理名称不佳的 isLoggedIn 等常规方法。
-
@Cerad 谢谢!是的,它做到了这一点并以这种方式工作。但是,如果有人不使用 Symfony 安全包,是否有任何适当的解决方案?我是一个初学者,虽然我尝试了很多,但安全包飞过我的头,无法正确理解它的用法,因此使用传统方式。
-
你的方法会奏效。安全捆绑包很复杂,但如果您按照文档中的示例进行操作,它还算不错。特别是如果您最终想要使用角色等。
标签: php symfony symfony-3.3