Laravel 5.6 - Использование @foreach в уценке - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь отобразить цикл @foreach в шаблоне уценки. Но я не заставляю его работать. Я нашел это Laravel - используйте @foreach в почтовой рассылке , но это не взяло меня дальше.

Я изучал документы по Laravel, но, похоже, я не могу найти свою проблему.

Я пытаюсь создать письмо со всей информацией из таблицы поставщиков. Поэтому я использую класс поставщика.

Может быть, кто-то может открыть мне глаза или дать подсказку в правильном направлении.

Маршрут:

Route::get('/mail',function(){

  $suppliers = App\ModelSupplier\Supplier::all();
  return new App\Mail\Supplier\Certificates($suppliers);
});

Mail-Class:

namespace App\Mail\Supplier;

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

 use App\ModelSupplier\Supplier;

class Certificates extends Mailable
{
 use Queueable, SerializesModels;

 public $supplier;

public function __construct(Supplier $supplier)
    {
    //
    $this->supplier = $supplier;

    }

public function build()
   {

        return $this->markdown('email.supplier.test');
    }
}

Markdown-файл:

# Certificate:
@component('mail::table')
|No. | Company | Address
|:--------|:--------|----------:

@foreach($supplier as $detail)
| {{$detail->no}} | {{$detail->company}} | {{$detail->address}}
@endforeach
@endcomponent

Я получаю эту ошибку:

 Argument 1 passed to App\Mail\Supplier\Certificates::__construct() 
 must be an instance of App\ModelSupplier\Supplier, instance of 
 Illuminate\Database\Eloquent\Collection given, called in C:\xampp\htdocs  
 \pps\routes\mail.php on line 7

Я совершенно не прав?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы ожидаете одного поставщика в своем конструкторе, но вы даете ему набор поставщиков, когда инициализируете его.

public function __construct(Supplier $supplier)
{
    $this->supplier = $supplier;
}

Однако, это должно быть примерно так:

use Illuminate\Database\Eloquent\Collection;

class Certificates extends Mailable
{
    public $suppliers;

    public function __construct(Collection $suppliers)
    {
        $this->suppliers = $suppliers;
    }

    public function build()
    {
        return $this->markdown('email.supplier.test');
    }
}
0 голосов
/ 03 июля 2018

Хорошо! Это похоже на решение в Mail-Class:

public function build()
{

    $suppliers = Supplier::all();

    return $this->markdown('email.supplier.certificates')->with(['suppliers'=>$suppliers]);
}

Но я все еще открыт для лучших решений!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...