如何将数组从 Controller 发送到可邮寄的降价模板,并在 table 组件中循环使用 Laravel?

How to send an array from Controller to mailable markdown template and loop it in a table component with Laravel?

我想从我的控制器发送一个数组(一种硬编码的购物车)到可邮寄的 markdown 模板,并在 table 组件中循环它,使多行包含我的所有命令。

我通过 POST 请求从我的视图发送此数据:

commande = {
    "phone":"+213582828193",
    "email":"John@doe.fr",
    "address":"2 rue albert camus",
    "panier": [
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
        { "name":"Ford", "quantite":"2", "prix":"2000da" },
    ],
    "total":20
}

我的控制器接收到数据并且显示正确我可以访问所有数据,甚至是 $panier 数组 :

public function store(Request $request)
{

    $phone = $request->phone;
    $email = $request->email;
    $address = $request->address;
    $panier = $request->panier;
    $total = $request->total;

    $data_panier = [
      'name'=> json_decode($panier['name']) ,
        'quantite'=> $panier['quantite'],
        'prix'=> $panier['prix'],
    ];

    $data = [
        'phone' => $phone,
        'email' => $email,
        'address' => $address,
        'total'=>$total
    ];
    //dd($panier[0]["name"]);

    if ($request){
        //Send Email
        Mail::to($email)->send(new SendInvoice($data, $data_panier));
    }
}

My Mailable class 我尝试发送我的 $data_panier 数组 :

class SendInvoice extends Mailable{
use Queueable, SerializesModels;

/**
 * Create a new message instance.
 *
 * @return void
 */
public $data,$data_panier;
public function __construct($data, $data_panier)
{
    $this->data = $data;
    $this->data_panier = $data_panier;
}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->from('noreply@mail.com', 'Mailer')->subject('New command')->markdown('mail.send-invoice');
}}

最后是我的电子邮件模板,我想在其中显示我的 $data_panier 以及 foreach 循环中的所有数据,但我不知道如何做,也没有找到文档或帮助怎么做:

@component('mail::message')
Introduction

The body of your message.
@component('mail::table')
| Laravel       | Table         | Example  |
| ------------- |:-------------:| --------:|
| {{ $data_panier['name'] }}      | {{ $data_panier['quantite'] }}      | {{ $data_panier['prix'] }}      |
| Col 3 is      | Right-Aligned |       |
@endcomponent

@component('mail::button', ['url' => ''])
Button Text
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

提前致谢!

你可以这样写

    $data = [
        'phone' => $phone,
        'email' => $email,
        'address' => $address,
        'total'=>$total,
        'data_panier' => $data_panier
    ];

    if ($request){
        Mail::to($email)->send(new SendInvoice($data));
    }
}

您的可邮寄 class 将是

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

希望这能解决您的问题。

遍历数组使用blade语法

 <ul>
    @if ( isset( $data_panier ) && is_array( $data_panier ) )
        @foreach ( $data_panier as $data_pan ) --}}
                <li> {{ $data_pan['name'] }} </li>
        @endforeach
    @endif
   </ul>