【问题标题】:How to send an array from Controller to mailable markdown template and loop it in a table component with Laravel?如何将数组从控制器发送到可邮寄的降价模板并使用 Laravel 在表格组件中循环?
【发布时间】:2021-01-14 20:59:31
【问题描述】:

我想将一个数组(一种硬编码的购物车)从我的 Controller 发送到可邮寄的 Markdown 模板,并在表格组件中循环它,以使多行包含我的所有命令。

我通过 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));
    }
}

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

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 | $20      |
@endcomponent

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

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

提前谢谢你!

【问题讨论】:

    标签: php arrays laravel email markdown


    【解决方案1】:

    你可以这样写

        $data = [
            'phone' => $phone,
            'email' => $email,
            'address' => $address,
            'total'=>$total,
            'data_panier' => $data_panier
        ];
    
        if ($request){
            Mail::to($email)->send(new SendInvoice($data));
        }
    }
    

    你的可邮寄课程是

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

    希望这能解决您的问题。

    【讨论】:

    • 谢谢,但首先它不起作用,这不是我想要的
    【解决方案2】:

    使用刀片语法遍历数组

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

    【讨论】:

    • 我可以在我的电子邮件模板上显示数据,但不能显示数据数组并循环它
    • @therealwalim 使用刀片的@foreach ($alerts as $key) 有什么问题,它应该可以工作。
    • @therealwalim 尝试使用它,如果您仍然遇到任何问题,请告诉我,我已经更新了我的答案。
    猜你喜欢
    • 2021-04-16
    • 2019-12-11
    • 2021-08-05
    • 2021-03-15
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2019-10-18
    • 2019-06-27
    相关资源
    最近更新 更多