[英]Symfony 4 kernel controller event listener - implement interface
I want to make some operations before controller load and I have problem with include interfaces or classes into function. 我想在控制器加载之前进行一些操作,但在将接口或类包含到函数中时遇到问题。
My question is how should I do it to start working? 我的问题是我应该如何开始工作?
There is a code: 有一个代码:
~/src/Controller/ControllerListener.php 〜/ SRC /控制器/ ControllerListener.php
<?php
namespace App\EventListener;
use App\Controller\DailyWinController;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class ControllerListener implements DailyWinController
{
public function onKernelController(FilterControllerEvent $event, LoggerInterface $logger) {
$logger->alert('Working');
}
}
~/src/Controller/DailyWinController.php 〜/ SRC /控制器/ DailyWinController.php
<?php
namespace App\Controller;
interface DailyWinController {
// maybe there something?
}
~/src/Controller/UserController.php 〜/ SRC /控制器/ UserController.php
<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\DailyWin;
use Psr\Log\LoggerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class UserController extends Controller implements DailyWinController
{
/**
* @Route("/user", name="user")
* @param AuthorizationCheckerInterface $authChecker
* @param UserInterface $user
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function user(AuthorizationCheckerInterface $authChecker, UserInterface $user = null, LoggerInterface $logger) {
if ($authChecker->isGranted('ROLE_USER') === false) {
return $this->redirectToRoute('logowanie');
}
$logger->warning('Logger is working');
$em = $this->getDoctrine()->getManager();
$DWrep = $em->getRepository(DailyWin::class);
$userId = $user->getId();
$dailyWin = $DWrep->findOneBy(['userId' => $userId]);
return $this->render('andprize/user/index.html.twig', array(
'dailyWin' => $dailyWin,
'userId' => $userId
));
}
}
I have the following problem: 我有以下问题:
FatalThrowableError Type error: Argument 2 passed to App\\EventListener\\ControllerListener::onKernelController() must implement interface Psr\\Log\\LoggerInterface, string given
FatalThrowableError类型错误:传递给App \\ EventListener \\ ControllerListener :: onKernelController()的参数2必须实现接口Psr \\ Log \\ LoggerInterface,给定字符串
You have to inject the logger to the listener. 您必须将记录器注入到侦听器。
<?php
namespace App\EventListener;
use App\Controller\DailyWinController;
use Psr\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
class ControllerListener implements DailyWinController
{
protected $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger=$logger;
}
public function onKernelController(FilterControllerEvent $event) {
$this->logger->alert('Working');
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.