[Messenger] added interfaces to be type-hinted even when not using a Container
This commit is contained in:
parent
373dad371a
commit
963fde9fb1
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Messenger\Handler\Locator;
|
||||
|
||||
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
|
||||
|
||||
/**
|
||||
* @author Miha Vrhovnik <miha.vrhovnik@gmail.com>
|
||||
* @author Samuel Roze <samuel.roze@gmail.com>
|
||||
*/
|
||||
abstract class AbstractHandlerLocator implements HandlerLocatorInterface
|
||||
{
|
||||
public function resolve($message): callable
|
||||
{
|
||||
$messageClass = \get_class($message);
|
||||
|
||||
if (null === $handler = $this->resolveFromClass($messageClass)) {
|
||||
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $messageClass));
|
||||
}
|
||||
|
||||
return $handler;
|
||||
}
|
||||
|
||||
private function resolveFromClass(string $class): ?callable
|
||||
{
|
||||
if ($handler = $this->getHandler($class)) {
|
||||
return $handler;
|
||||
}
|
||||
|
||||
foreach (class_implements($class, false) as $interface) {
|
||||
if ($handler = $this->getHandler($interface)) {
|
||||
return $handler;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (class_parents($class, false) as $parent) {
|
||||
if ($handler = $this->getHandler($parent)) {
|
||||
return $handler;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
abstract protected function getHandler(string $class);
|
||||
}
|
@ -12,13 +12,12 @@
|
||||
namespace Symfony\Component\Messenger\Handler\Locator;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
|
||||
|
||||
/**
|
||||
* @author Miha Vrhovnik <miha.vrhovnik@gmail.com>
|
||||
* @author Samuel Roze <samuel.roze@gmail.com>
|
||||
*/
|
||||
class ContainerHandlerLocator implements HandlerLocatorInterface
|
||||
class ContainerHandlerLocator extends AbstractHandlerLocator
|
||||
{
|
||||
private $container;
|
||||
|
||||
@ -27,39 +26,7 @@ class ContainerHandlerLocator implements HandlerLocatorInterface
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
public function resolve($message): callable
|
||||
{
|
||||
$messageClass = \get_class($message);
|
||||
|
||||
if (null === $handler = $this->resolveFromClass($messageClass)) {
|
||||
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $messageClass));
|
||||
}
|
||||
|
||||
return $handler;
|
||||
}
|
||||
|
||||
private function resolveFromClass($class): ?callable
|
||||
{
|
||||
if ($handler = $this->getHandler($class)) {
|
||||
return $handler;
|
||||
}
|
||||
|
||||
foreach (class_implements($class, false) as $interface) {
|
||||
if ($handler = $this->getHandler($interface)) {
|
||||
return $handler;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (class_parents($class, false) as $parent) {
|
||||
if ($handler = $this->getHandler($parent)) {
|
||||
return $handler;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getHandler($class)
|
||||
protected function getHandler(string $class)
|
||||
{
|
||||
$handlerKey = 'handler.'.$class;
|
||||
|
||||
|
@ -11,12 +11,10 @@
|
||||
|
||||
namespace Symfony\Component\Messenger\Handler\Locator;
|
||||
|
||||
use Symfony\Component\Messenger\Exception\NoHandlerForMessageException;
|
||||
|
||||
/**
|
||||
* @author Samuel Roze <samuel.roze@gmail.com>
|
||||
*/
|
||||
class HandlerLocator implements HandlerLocatorInterface
|
||||
class HandlerLocator extends AbstractHandlerLocator
|
||||
{
|
||||
/**
|
||||
* Maps a message (its class) to a given handler.
|
||||
@ -28,14 +26,8 @@ class HandlerLocator implements HandlerLocatorInterface
|
||||
$this->messageToHandlerMapping = $messageToHandlerMapping;
|
||||
}
|
||||
|
||||
public function resolve($message): callable
|
||||
protected function getHandler(string $class)
|
||||
{
|
||||
$messageKey = \get_class($message);
|
||||
|
||||
if (!isset($this->messageToHandlerMapping[$messageKey])) {
|
||||
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $messageKey));
|
||||
}
|
||||
|
||||
return $this->messageToHandlerMapping[$messageKey];
|
||||
return $this->messageToHandlerMapping[$class] ?? null;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user