Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony和条令在不同项目上的沟通_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Symfony和条令在不同项目上的沟通

Symfony和条令在不同项目上的沟通,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,该应用程序分为几个项目 该数据库是一个单独的项目和使用原则(不含Symfony) API是一个symfony项目,它使用数据库项目作为依赖项(供应商) 我想通过聆听条令事件来创建Symfony级别的事件,但是Symfony不知道任何条令,因为它在其项目之外 你有什么想法吗 谢谢如果我理解正确,您有两个Symfony应用程序-第一个带有数据库,第二个通过API使用此数据库。不可能在第二个应用程序中实现条令事件侦听器,因为它不知道第一个应用程序的条令实体。但是,您可以通过使用解决此问题。第一个应用程

该应用程序分为几个项目

该数据库是一个单独的项目和使用原则(不含Symfony)

API是一个symfony项目,它使用数据库项目作为依赖项(供应商)

我想通过聆听条令事件来创建Symfony级别的事件,但是Symfony不知道任何条令,因为它在其项目之外

你有什么想法吗


谢谢

如果我理解正确,您有两个Symfony应用程序-第一个带有数据库,第二个通过API使用此数据库。不可能在第二个应用程序中实现条令事件侦听器,因为它不知道第一个应用程序的条令实体。但是,您可以通过使用解决此问题。第一个应用程序将在每个条令事件上发送消息,第二个应用程序将订阅并处理这些消息

像这样的。 第一个应用程序端

<?php

declare(strict_types=1);

namespace App\EventListener;

use App\Entity\User;
use App\Message\UserChangedNotification;
use Doctrine\Persistence\Event\LifecycleEventArgs;
use Symfony\Component\Messenger\MessageBusInterface;

class UserChangedNotifier
{
    private MessageBusInterface $bus;

    public function __construct(MessageBusInterface $bus)
    {
        $this->bus = $bus;
    }

    public function postUpdate(User $user, LifecycleEventArgs $event): void
    {
        $this->bus->dispatch(new UserChangedNotification($user));
    }
}
<?php

declare(strict_types=1);

namespace App\MessageHandler;

use App\Message\UserChangedNotification;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

class UserChangedNotificationHandler implements MessageHandlerInterface
{
    public function __invoke(UserChangedNotification $message)
    {
        // ... do something with the message, e.g. dispatch Symfony event
    }
}

感谢您的回复,包含数据库的项目不是Symfony项目。这种方法也可以,因为您可以使用一些常见的消息代理,如RabbitMQ异步连接第一个和第二个应用程序。如果第一个应用程序也是PHP(我假设是,因为它使用的是条令),那么就可以使用Symfony Messanger组件作为独立的解决方案。