Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Ах да, сорри, на счет переименования переменной моя неопытность сказалась. Я кеш чистил не вовремя)) т.е. в очередь уходило со старой еще, а потом я его чистил. Вернул все обратно. Потом пробовал еще раз переименовывал, при чем только лишь часть $this->message = $message; в $this->msg = $message; и тогда получал в ошибке именно $msg. Но опять таки в итогде все работает и с $message, надо было лишь объявить ее protected
Проблема решена!
Всего то нужно было добавить protected $message; в mailable класс (т.е. с самим именем переменной $message проблем нет, хотя в прошлых версиях ларавел похоже были, т.к. кому-то переименование помогало). Странно все же, что это нужно только для очередей, а при просто отправке работало и без этого. Найдено тут - https://laracasts.com/discuss/channels/ … queued-job
П.С. можно кинуть камнем)) в документации в примере майлабле класса все есть
Чистил кеш.. Вот и не могу разобаться. В гугле находил несколько описаний этой проблемы (хотя у них не $message была переменная, другая, но тоже не работало так же), но все без решения остались..
Таки попробовал уже сегодня, все равно сон отбило.. Но ничего не изменилось. Переименовал (рефактор шторма) все: файл, класс (модель), таблицу в базе, переменные все. Все работает кроме очереди. А ошибка там точно такая же. Т.е. ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35, стоит все та же Test::$message, хотя у меня в коде $message вообще нигде нет.
Завтра попробую переименовать модель, но все же, почему все отлично работает (письма отправляются и приходят в подобающем виде) если отправлять send`ом, и только в queue выходит ошибка?
Не пинайте за возможно бесполезный ответ, но за основу для вашей задачи можно взять https://github.com/spatie/laravel-permission, и на этой основе уже проектировать и дописывать ваши особые требования.
Laravel 5.5 on Homestead
Проблема в том, что письма методом send отправляются нормально, но если ставить в очередь, выходит ошибка (чуть ниже). Единственное отилчие всего кода в send/queue:
Mail::to($contact)->send(new $template($message));
Mail::to($contact)->queue(new $template($message));
Ошибка в таблице failed_job:
ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35 ...
Т.е. когда запускается из очереди не получает модель с сообщением как я понимаю.. Но почему? При том, что при отправке сразу все работает...
Не знаю как должно быть, но удивляет, что таблица jobs в базе пустая, хотя и из консоли видно, в и дальнейшем в failed_jobs, что в очередь задачи таки становятся.
На всякий случай app/Mail/Test.php:
namespace App\Mail;
use App\Message;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class Test extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Message $message)
{
//
$this->message = $message;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('message_templates.test')->with([
'mailBody' => $this->message->text,
]);
}
}
Там все просто оказалось) создал роль vagrant в постгресе (пользователь хомстед по умолчанию) и вошел. Только вот ошибка светится, но да, если не разберусь, спрошу отдельно.
Еще раз спасибо за помощь!
Спасибо! Все заработало)
Я новичек совсем, не только в Ларавел, а и ООП вообще)) В доках написано "The to method accepts an email address, a user instance, or a collection of users." вот и пробовал через коллекции, но почему-то про просто массив я совсем не подумал(..
А сейчас с PostgreSQL разбираюсь и сходу не удалось запустить phpPgAdmin, точнее не могу понять какой логин/пароль вводить для подключения к серверу уже внутри phpPgAdmin. Может тоже подскажете?))
Передаваемая коллекция:
Collection {#310 ▼
#items: array:2 [▼
"email" => "email1@mail.com"
"name" => "User1 Name"
]
}
Исходная строка: "email1@mail.com, User1 Name"
$email = explode(',', $email);
$keys = collect(['email', 'name']);
$values = collect([trim($email[0]), trim($email[1])]);
$recipient = $keys->combine($values);
$template = 'App\Mail\\'.$this->template;
Mail::to($recipient)->send(new $template($this));
Laravel 5.5, Homestead
Вопрос именно в имени. Отправка на просто емайл без проблем, но при попытке создать коллецию с майлом и именем, что судя по докуменации должно сработать, получаю ошибку: Address in mailbox given [ User1 Name] does not comply with RFC 2822, 3.6.2.