Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 25.01.2018 10:46:49

Ed

Ах да, сорри, на счет переименования переменной моя неопытность сказалась. Я кеш чистил не вовремя)) т.е. в очередь уходило со старой еще, а потом я его чистил. Вернул все обратно. Потом пробовал еще раз переименовывал, при чем только лишь часть $this->message = $message; в $this->msg = $message; и тогда получал в ошибке именно $msg. Но опять таки в итогде все работает и с $message, надо было лишь объявить ее protected

#2 Re: Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 25.01.2018 08:40:14

Ed

Проблема решена!
Всего то нужно было добавить protected $message; в mailable класс (т.е. с самим именем переменной $message проблем нет, хотя в прошлых версиях ларавел похоже были, т.к. кому-то переименование помогало). Странно все же, что это нужно только для очередей, а при просто отправке работало и без этого. Найдено тут - https://laracasts.com/discuss/channels/ … queued-job
П.С. можно кинуть камнем)) в документации в примере майлабле класса все есть neutral

#3 Re: Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 25.01.2018 07:33:03

Ed

Чистил кеш.. Вот и не могу разобаться. В гугле находил несколько описаний этой проблемы (хотя у них не $message была переменная, другая, но тоже не работало так же), но все без решения остались..

#4 Re: Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 24.01.2018 22:00:23

Ed

Таки попробовал уже сегодня, все равно сон отбило.. Но ничего не изменилось. Переименовал (рефактор шторма) все: файл, класс (модель), таблицу в базе, переменные все. Все работает кроме очереди. А ошибка там точно такая же. Т.е. ErrorException: Undefined property: App\Mail\Test::$message in /home/vagrant/Code/ssender/app/Mail/Test.php:35, стоит все та же Test::$message, хотя у меня в коде $message вообще нигде нет.

#5 Re: Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 24.01.2018 21:34:12

Ed

Завтра попробую переименовать модель, но все же, почему все отлично работает (письма отправляются и приходят в подобающем виде) если отправлять send`ом, и только в queue выходит ошибка?

#6 Re: Laravel 5.x » Абстрактный вопрос как построить систему управления правами доступа » 24.01.2018 20:52:47

Ed

Не пинайте за возможно бесполезный ответ, но за основу для вашей задачи можно взять https://github.com/spatie/laravel-permission, и на этой основе уже проектировать и дописывать ваши особые требования.

#7 Laravel 5.x » Mail..->send работает, Mail..->queue уходи в failed. » 24.01.2018 20:47:01

Ed
Ответов: 9

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,
        ]);
    }
}

#8 Re: Laravel 5.x » Как с помощью mailable отправить письмо не используя класс User » 09.12.2017 13:19:16

Ed

Там все просто оказалось) создал роль vagrant в постгресе (пользователь хомстед по умолчанию) и вошел. Только вот ошибка светится, но да, если не разберусь, спрошу отдельно.
Еще раз спасибо за помощь!

#9 Re: Laravel 5.x » Как с помощью mailable отправить письмо не используя класс User » 09.12.2017 13:13:48

Ed

Спасибо! Все заработало)
Я новичек совсем, не только в Ларавел, а и ООП вообще)) В доках написано "The to method accepts an email address, a user instance, or a collection of users." вот и пробовал через коллекции, но почему-то про просто массив я совсем не подумал(..

А сейчас с PostgreSQL разбираюсь и сходу не удалось запустить phpPgAdmin, точнее не могу понять какой логин/пароль вводить для подключения к серверу уже внутри phpPgAdmin. Может тоже подскажете?))

#10 Re: Laravel 5.x » Как с помощью mailable отправить письмо не используя класс User » 09.12.2017 12:56:14

Ed

Передаваемая коллекция:
Collection {#310 ▼
  #items: array:2 [▼
    "email" => "email1@mail.com"
    "name" => "User1 Name"
  ]
}

Исходная строка: "email1@mail.com, User1 Name"

#11 Re: Laravel 5.x » Как с помощью mailable отправить письмо не используя класс User » 09.12.2017 11:50:25

Ed
$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));

#12 Laravel 5.x » Как с помощью mailable отправить письмо не используя класс User » 09.12.2017 11:02:44

Ed
Ответов: 8

Laravel 5.5, Homestead
Вопрос именно в имени. Отправка на просто емайл без проблем, но при попытке создать коллецию с майлом и именем, что судя по докуменации должно сработать, получаю ошибку: Address in mailbox given [ User1 Name] does not comply with RFC 2822, 3.6.2.

Подвал раздела