gpt4 book ai didi

php - Symfony 事件订阅者对调度没有反应

转载 作者:搜寻专家 更新时间:2023-10-31 20:57:29 26 4
gpt4 key购买 nike

我正在使用带有 Autowiring 调度程序的服务来调度事件。为了测试事件,我在发送事件之前添加了一个事件订阅者。但是,已注册的订阅者没有记录我期望的方法。

事件:

<?php

namespace App\Event;

use Symfony\Component\EventDispatcher\Event;

class GameStartEvent extends Event {

}

订阅者:

<?php

namespace App\Event;

use Psr\Log\LoggerAwareTrait;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class GameStartSubscriber implements EventSubscriberInterface {

use LoggerAwareTrait;

public function __construct(LoggerInterface $logger) {
$this->setLogger($logger);
}

public static function getSubscribedEvents() {
return [
"game.started" => [
[
'logEvent',
],
]
];
}

public function logEvent(GameStartEvent $event): void {
$this->logger->info("the game has started");
}
}

这是使用过的服务,它应该分派(dispatch)事件,事件注册应该在未来的其他地方发生。我只是在这里做测试:

<?php

namespace App\Service;

use App\Event\GameStartEvent;
use App\Event\GameStartSubscriber;
use Psr\Log\LoggerInterface;
use Psr\SimpleCache\CacheInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

class GameCacheService {

private $eventDispatcher;

private $logger;

public function __construct(EventDispatcherInterface $eventDispatcher, LoggerInterface $logger) {
$this->eventDispatcher = $eventDispatcher;
$this->logger = $logger;
}

// some other methods...

function startGame() {
// some code...

$gameStartSubscriber = new GameStartSubscriber($this->logger);
$this->eventDispatcher->addSubscriber($gameStartSubscriber);

$this->eventDispatcher->dispatch("game.started", new GameStartEvent());
}
}

调用服务方法后,没有记录指定的记录器消息。

最佳答案

<删除>代替`$this->eventDispatcher->dispatch("game.started", new GameStartEvent());`和`$this->eventDispatcher->dispatch("game.started", $event);`

你似乎至少在 App/Entity 中有你的事件,默认情况下它不是 Autowiring 的,也不应该。看看你的 services.yml,它应该被排除在 Autowiring 之外。将你的东西移动到类似 App/Event

的地方

关于php - Symfony 事件订阅者对调度没有反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com