1

私は Symfony フレームワークを初めて使用し、Messenger ( https://symfony.com/doc/current/messenger.html ) を使用してプロジェクトをセットアップしようとしています。私の理解では、「implements MessageHandlerInterface」を使用してハンドラー クラスをセットアップした後、ハンドラーを使用できるはずですが、うまく機能していないようです。新しいプロジェクトを最初から設定するなど、いくつかのことを試しました。Symfony 5.0.4 を使用しています。

私はこのようにプロジェクトを設定しました:

symfony new --full testMessenger
composer require messenger
php bin/console make:controller

次に、新しいメッセンジャーとハンドラーを作成し、コントローラーから呼び出しました。「<strong>メッセージ「App\Message\Message」のハンドラがありません。」</p>

php bin/console debug:messenger

出力:

Messenger 
========= 

messenger.bus.default 
--------------------- 

The following messages can be dispatched: 

-----------------------------------------------------  
 Symfony\Component\Mailer\Messenger\SendEmailMessage   
     handled by mailer.messenger.message_handler       
 Symfony\Component\Notifier\Message\ChatMessage        
     handled by chatter.messenger.chat_handler         
 Symfony\Component\Notifier\Message\SmsMessage         
     handled by texter.messenger.sms_handler           
-----------------------------------------------------  

私のコードは基本的にメッセージ ハンドラー ドキュメントのサンプルと同じですが、ここに追加します。

// src/Message.php
<?php

namespace App\Message;

class Message
{
    private $content;

    public function __construct(string $content)
    {
        $this->content = $content;
    }

    public function getContent(): string
    {
        return $this->content;
    }
}


// src/MessageHandler.php
<?php

namespace App\MessageHandler;

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

class SmsNotificationHandler implements MessageHandlerInterface
{
    public function __invoke(Message $message)
    {
        // ... do some work - like sending an SMS message!
    }
}


// src/Controller/MessageController.php
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Message\Message;

class MessageController extends AbstractController
{
    /**
     * @Route("/message", name="message")
     */
    public function index()
    {
        $this->dispatchMessage(new Message('Look! I created a message!'));

        return $this->render('message/index.html.twig', [
            'controller_name' => 'MessageController',
        ]);
    }
}




//config/packages/messenger.yaml

    framework:

    messenger:
        # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
        # failure_transport: failed

        transports:
            # https://symfony.com/doc/current/messenger.html#transport-configuration
            # async: '%env(MESSENGER_TRANSPORT_DSN)%'
            # failed: 'doctrine://default?queue_name=failed'
            # sync: 'sync://'

        routing:
            # Route your messages to the transports
            # 'App\Message\YourMessage': async
4

1 に答える 1