* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Messenger\Transport\Doctrine; use Doctrine\Persistence\ConnectionRegistry; use Symfony\Bridge\Doctrine\RegistryInterface; use Symfony\Component\Messenger\Exception\TransportException; use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface; use Symfony\Component\Messenger\Transport\TransportFactoryInterface; use Symfony\Component\Messenger\Transport\TransportInterface; /** * @author Vincent Touzet */ class DoctrineTransportFactory implements TransportFactoryInterface { private $registry; public function __construct($registry) { if (!$registry instanceof RegistryInterface && !$registry instanceof ConnectionRegistry) { throw new \TypeError(sprintf('Expected an instance of "%s" or "%s", but got "%s".', RegistryInterface::class, ConnectionRegistry::class, \is_object($registry) ? \get_class($registry) : \gettype($registry))); } $this->registry = $registry; } public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface { unset($options['transport_name']); $configuration = Connection::buildConfiguration($dsn, $options); try { $driverConnection = $this->registry->getConnection($configuration['connection']); } catch (\InvalidArgumentException $e) { throw new TransportException(sprintf('Could not find Doctrine connection from Messenger DSN "%s".', $dsn), 0, $e); } $connection = new Connection($configuration, $driverConnection); return new DoctrineTransport($connection, $serializer); } public function supports(string $dsn, array $options): bool { return str_starts_with($dsn, 'doctrine://'); } }