Итак, решаю задачу по отправке email-сообщений. По-хорошему это нужно делать асинхронно, что я и пытаюсь настроить. Но для начала я хочу проверить работоспособность кода, поэтому просто пишу текст в файл.
Сделал все по документации:
https://symfony.com/doc/current/messenger.html
В качестве транспорта пробовал как Redis, так и БД
Класс сообщения:
namespace App\Message;
/**
* Class EmailNotification
* @package App\Message
*/
final class EmailNotification
{
private $email;
private $flightId;
public function __construct(string $email, int $flightId)
{
$this->email = $email;
$this->flightId = $flightId;
}
public function getEmail(): string
{
return $this->email;
}
public function getFlightId(): int
{
return $this->flightId;
}
}
Класс обработчика, в котором я пытаюсь заставить код выполнить хоть какую-то полезную работу:
namespace App\MessageHandler;
use App\Message\EmailNotification;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
final class EmailNotificationHandler implements MessageHandlerInterface
{
/**
* @param EmailNotification $message
*/
public function __invoke(EmailNotification $message)
{
$email = $message->getEmail();
$flightId = $message->getFlightId();
$mes = "Flight $flightId was cancelled - $email";
$testFile = __DIR__ .'/../../var/log/test.txt';
file_put_contents($testFile, $mes);
}
}
Сам код вызова:
$emails = $this->getEmails($flightId);
foreach ($emails as $email) {
$bus->dispatch(new EmailNotification($email, $flightId));
}
Проблема в том, что в файлик, который упомянут в коде обработчика, ничего не пишется. Отправление сообщений само по себе работает - как в таблице БД, так и в Рэдисе создаются соответствующие записи.
Помогите разобраться, что я делаю не так? Никаких ошибок пока не увидел, файл доступен для записи.