Symfony 4内核控制器事件监听器 - 实现接口

问题描述 投票:1回答:1

我想在控制器加载之前进行一些操作,并且我遇到包含接口或类到函数的问题。

我的问题是我应该怎么做才能开始工作?

有一个代码:

〜/ 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 /控制器/ DailyWinController.php

<?php
namespace App\Controller;

interface DailyWinController {
    // maybe there something?
}

〜/ 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
        ));
    }
}

我有以下问题:

FatalThrowableError类型错误:传递给App \ EventListener \ ControllerListener :: onKernelController()的参数2必须实现接口Psr \ Log \ LoggerInterface,给出字符串

php symfony
1个回答
2
投票

您必须将记录器注入侦听器。

<?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');
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.