Электронная почта Laravel, переменные передачи

Я пытаюсь создавать электронные письма в Laravel, и у меня есть проблема с этим, я хочу отправлять электронную почту каждый понедельник, поэтому я хочу запускать ее как команду и планировать ее (если нет лучшего способа?). Вот мое электронное письмо:

<?php

namespace App\Mail;

use App\Event;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

    class MondayEmails extends Mailable
    {
        use Queueable, SerializesModels;

        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct()
        {
            $events = Event::limit(5)
                ->orderBy('title')
                ->get();
            return $events;
        }

        /**
         * Build the message.
         *
         * @return $this
         */
        public function build()
        {
            return $this->from('[email protected]')
                        ->view('emails.mondayEmail');
        }
    }

На данный момент $events возвращает мне коллекцию.

Вот мой вид почты:

@foreach ($events as $event)
    {{ $event->title }}
@endforeach

и команда:

<?php

namespace App\Console\Commands;

use App\Event;
use App\Mail\MondayEmails;
use Illuminate\Console\Command;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class MondayEmail extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'email:monday';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Monday Events being send!';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle(Request $request)
    {
        Mail::to('[email protected]')->send(new MondayEmails());

    }
}

и когда я запускаю его, я получаю:

[ErrorException] Неопределенная переменная: события (Просмотр: C:\xampp\htdocs\liveandnow\resources\views\emails\mondayEmail.blade.php)

[ErrorException] Неопределенная переменная: события

Как это решить? Это правильный подход? Или вы поступили бы иначе.


person Przemek Wojtas    schedule 04.08.2017    source источник


Ответы (2)


Конструктор ничего не возвращает, он позволяет установить свойства для доступа внутри классов к другим функциям. Если вы попробуете следующий код в своем классе MondayEmails, это позволит вам получить доступ к электронным письмам, возвращенным в конструкторе.

protected $events;
public function __construct()
{
    $this->events = Event::limit(5)
        ->orderBy('title')
        ->get();
}

public function build()
{
    $events = $this->events;
    return $this->from('[email protected]')
                ->view('emails.mondayEmail', compact('events'));
}
person mbozwood    schedule 04.08.2017
comment
Все равно не работает ;/ [ErrorException] Недопустимый аргумент для foreach() - person Przemek Wojtas; 04.08.2017
comment
Это действительно работает! У меня только что была синтаксическая ошибка, спасибо - person Przemek Wojtas; 04.08.2017

Я думаю, вы должны попробовать это:

protected $events;
public function __construct()
{
    $this->events = Event::limit(5)
        ->orderBy('title')
        ->get();
}

public function build()
{
    $events = $this->events;
    return $this->from('[email protected]')
                ->view('emails.mondayEmail')
                ->->with([
                'events' => $events,
              ]);
}

Надеюсь, эта работа для вас !!!

person AddWeb Solution Pvt Ltd    schedule 04.08.2017
comment
В обоих этих решениях я получаю: [ErrorException] Неопределенное свойство: App\Mail\MondayEmails::$events - person Przemek Wojtas; 04.08.2017
comment
@PrzemekWojtas Позвольте мне проверить это - person AddWeb Solution Pvt Ltd; 04.08.2017
comment
Я забыл защищенные $events; теперь я получаю [ErrorException] Недопустимый аргумент для foreach() - person Przemek Wojtas; 04.08.2017
comment
@PrzemekWojtas Да, потому что вы не можете передать переменную $events с файлом просмотра. - person AddWeb Solution Pvt Ltd; 04.08.2017
comment
@PrzemekWojtas: если мой ответ - ваше решение, примите мой ответ - person AddWeb Solution Pvt Ltd; 04.08.2017
comment
тот же самый, для foreach указан недопустимый аргумент - person Przemek Wojtas; 04.08.2017
comment
@PrzemekWojtas Пожалуйста, перейдите по этой ссылке (mattstauffer.co/blog/introduction-mailables -в-ларавеле-5-3) - person AddWeb Solution Pvt Ltd; 04.08.2017
comment
Я нигде не вижу, где передается несколько записей - person Przemek Wojtas; 04.08.2017
comment
@PrzemekWojtas См. последнюю функцию сборки (mattstauffer.co/ блог/) - person AddWeb Solution Pvt Ltd; 04.08.2017
comment
Ваш способ, однако, $events = $this-›events; нулевой по какой-то причине - person Przemek Wojtas; 04.08.2017