我尝试在markdown模板中呈现@foreach循环。但是我不起作用。我找到了这个Laravel- use @foreach in markdown mail,但并没有使我走得更远。
我研究了Laravel文档,但似乎找不到我的问题。
我尝试用供应商表中的所有信息生成邮件。因此,我使用供应商类别。
也许有人可以睁开我的眼睛,或者可以向我暗示正确的方向。
路线:
Route::get('/mail',function(){
$suppliers = App\ModelSupplier\Supplier::all();
return new App\Mail\Supplier\Certificates($suppliers);
});
邮件类别:
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
我完全错了吗?
谢谢。
答案 0 :(得分:0)
好的!这似乎是邮件类别中的解决方案:
public function build()
{
$suppliers = Supplier::all();
return $this->markdown('email.supplier.certificates')->with(['suppliers'=>$suppliers]);
}
但是我仍然愿意寻求更好的解决方案!
答案 1 :(得分:0)
您期望构造函数中有一个供应商,但是在初始化它时会为其提供供应商集合。
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');
}
}