Здравствуйте!
Может кто уже делал, что-то подобное - подскажите куда смотреть вопрос..
Есть модуль из которого устанавливается блок с формой вопроса на сайт. После того, как пользователь отвечает, должна происходить отправка сообщения на его почту с некоторой информацией.
Не получается сделать отправку сообщения из кода. Смотрела инструкцию здесь - https://niklan.net/blog/214, но что-то не срабатывает. Ошибка в том, что модуль никак не может увидеть $mail_handler и не передает аргумент - ошибка типа:
ArgumentCountError: Too few arguments to function Drupal\testmodul\Form\TestForm::__construct(), 0 passed in
.
Комментарии
В example.services.yml объявили аргументы для сервиса example.mail_handler?
да, конечно, все по инструкции делала, может библиотечку какую то надо еще добавить, чтоб хандлер модуль увидел?
Погодите-ка, а причем тут конструктор формы?
$mail_handler должен передаваться в конструктор класса письма:
...
public function __construct(MailHandler $mail_handler, RequestStack $request_stack, ConfigFactoryInterface $config_factory) {
Не могу понять принцип построения всей этой структуры... Дело в том, что сообщение должно отправляться из блока (сам блок в модуле через аждакс подключен и выведен на страницу), В блоке, как бы есть своя форма с вопросом и после её отправке должно еще уходить и оповещение на почту. Сам блок и форма рабочие, а вот сообщение, чтобы отправить - не получается вписать туда никак.. может пример есть какой-то, где это можно увидеть, потому, что та инструкция, что я нашла не подходит
Сделала по инструкции:
src/Mail/MailHandler.php
example.services.yml
Но при добавлении в форму:
$body = [
'#markup' => '<strong>Hello World!</strong>',
];
$mail_handler->sendMail('example@example.com', $subject, $body);
Выдаёт ошибку, что $mail_handler - не найден или передан 0 аргументов.
Решение пока применяю вот это - https://jino.ru/journal/articles/pochta-phpmailer/ - оно рабочее, но я не уверенна, что оно лучшее, поэтому вопрос актуален.
Можно сделать намного проще. Сначала
<?php
$this->mailManager->mail($module_name, $key, $mail, 'ru', $params);
?>
где mailManager это
Drupal\Core\Mail\MailManagerInterface;
и потом
<?php
/**
* Implements hook_mail().
*/
function custom_mail(string $key, array &$message, array $params): void {
if ($key == 'custom_mail') {
$message['subject'] = $params['subject'];
$message['body'][] = $params['message'];
}
}
?>
Благодарю посмотрю и этот вариант тоже!