Вот мой класс Mailable:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class OrderConfirmation extends Mailable
{
use Queueable, SerializesModels;
public $message;
public $subject;
public $from;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($message, $subject, $from)
{
$this->message = $message;
$this->subject = $subject;
$this->from = $from;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from($this->from)
->subject($this->subject)
->view('emails.orders.confirmation');
}
}
Я пытаюсь проверить, есть ли у почты определенный адрес отправителя, например:
Mail::fake();
$customer = '[email protected]';
$from = '[email protected]';
Mail::to($customer)->queue(new OrderConfirmation('Some Message', 'Some Subject', $from));
Mail::assertQueued(OrderConfirmation::class, function ($mail) {
return $mail->hasFrom('[email protected]');
});
но он получает «ErrorException: недопустимое смещение строки 'адрес'»
/var/www/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php:597
Laravel 5.6
Это ошибка или я что-то не так делаю?
Добавлено в топ






Причина возникновения этой проблемы в том, что вы переопределяете свойство $from в классе Mailable.
Вы можете удалить свойство $from, которое вы настроили в классе, и вызвать метод from() из конструктора:
public $message;
public function __construct($message, $subject, $from)
{
$this->message = $message;
$this->subject = $subject;
$this->from($from);
}
public function build()
{
return $this->view('emails.orders.confirmation');
}
В качестве альтернативы вы можете переименовать свойство $from во что-то вроде $fromAddress.
NB То же самое происходило и с subject, но поскольку метод subject() просто существует для присвоения значения свойству объекта в классе, на самом деле это не вызывает проблемы.
О, черт возьми! Я просто совершенно забыл, что этот класс расширяет Mailable! Спасибо, что указали на это!
Какую версию Laravel вы используете? Можете ли вы также добавить свой класс
OrderConfirmation?