【问题标题】:Laravel Undefined Variable: donor ErrorException in d03bd104494df21919e458a02c3243e2b323db06.php line 3:Laravel 未定义变量:d03bd104494df21919e458a02c3243e2b323db06.php 第 3 行中的供体 ErrorException:
【发布时间】:2017-05-22 13:37:00
【问题描述】:

我有一个控制器,主要有两个功能。第一个函数将用户添加到数据库并向用户发送电子邮件 (receipt.blade.php)。第二个函数允许用户获取用户输入的特定电子邮件的所有收据。

现在,如果我直接转到用户可以输入电子邮件并获取所有收据的页面,它工作正常。但是,如果我尝试通过添加新用户的过程来执行此操作,我会在单击提交以添加用户后得到标题中描述的错误。但是,它已将用户添加到数据库,但显示错误,因为它发送的电子邮件是receipt.blade.php 并且具有未定义的变量。我的控制器有这些:

use App\Donor;
use App\Video;
use Illuminate\Http\Request;
use DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Mail;

第一个函数是:

public function thankyoupage(Request $data, Mailer $mailer){
$donor = Donor::create([
            'first_name'=> $data->first_name,
            'last_name' => $data->last_name,
            'email' => $data->email,
            'video_count' => $video_count,
            'amount_donated' => $data->amount_donated,
});

$mailer
            ->to($data->input('email'))
            ->send(new \App\Mail\MyMail(($data->input('first_name')),($data->input('last_name')),
                ($data->input('amount_donated'))));

return redirect()->action('PagesController@thank1');
    }

我的邮寄文件(可邮寄)是:

class MyMail extends Mailable
{
    use Queueable, SerializesModels;

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

    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('myemailid12341@gmail.com')
            ->view('emails.receipt');
    }
}

第二个功能是:

public function getUserReceipts(Request $data){
    $email = $data->email;

    $donor = Donor::where('email', $email)->get(); 

   return view('emails.receipt')->with(compact('donor'));
}

收据文件只包含:

@foreach($donor as $value)
    {{ $value->first_name }}
    {{ $value->last_name }}
    {{ $value->amount_donated }}
@endforeach

我得到的错误似乎是因为收据文件中的捐赠者是 未定义,我不确定如何修复它,因为它是通过紧凑型传递的 在第二个函数中。

非常感谢您的帮助。

【问题讨论】:

  • 您使用Donor::create([ 创建了$donor,但以}] 结束。

标签: php laravel email laravel-5 laravel-5.4


【解决方案1】:

从你的最后一个问题我可以看出问题所在。问题是您正在重用相同的视图,该视图采用两组不同的数据。当与getUserReceipts 方法一起使用时,它会为多个捐赠者生成收据。但是当您发送邮件时,您将视图用作邮件内容。在这种情况下,您需要使用可邮寄类中设置的属性。理想的情况是创建一个新视图来发送单个电子邮件收据并像这样处理它。

将您的可邮寄类更改为此。有了这个,你可以在你的视图中使用捐助者的所有属性。

<?php

namespace App\Mail;

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

class MyMail extends Mailable
{
    use Queueable, SerializesModels;

    public $donor;

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

    public function build()
    {
        return $this->from('myemailid12341@gmail.com')
            ->view('emails.singlereceipt');
    }
}

更改您发送电子邮件的方式

\Mail::to($data->input('email'))->send(new \App\Mail\MyMail($donor));

创建一个新视图singlereceipt.blade.php 并改用以下代码。

{{ $donor->first_name }}
{{ $donor->last_name }}
{{ $donor->amount_donated }}

【讨论】:

  • 我完全按照您的建议进行操作,但收到此错误:“传递给 App\Mail\MyMail::__construct() 的参数 1 必须是 App\Mail\Donor 的实例, App\Donor 给定,在第 116 行的 C:\Users\Dell\final\app\Http\Controllers\PagesController.php 中调用并定义“。第 116 行是 \Mail::to($data......) 行。有什么想法吗?
  • @AJth 在顶部添加use App\Donor; 就像我有或将构造函数参数从Donor $donor 更改为\App\Donor $donor
  • 我以前没有看过你的帖子,所以我只是把我的邮件改成原来的样子,并在构建函数中传递了singlereceipt.blade而不是receipt.blade,所以现在它工作正常了。是的,我错过了使用 App\Donor,所以我相信你刚才所说的也可以。但既然它无论如何都可以工作,我想我不必再做任何事情了,对吧?或者你认为它可能会导致任何问题..我没有任何更重要的功能要实现。另外,感谢您的帮助
  • @AJth 将邮件移动到一个单独的班级,就像我向你展示的那样,这是一个很好的做法。最后是偏好。选择您认为更适合您的。
【解决方案2】:

您在发送数据以供查看时出错。如果您使用with() 函数发送数据,那么语法应该是:

return view('emails.receipt')->with('donor', $donor); 

见Passing Data To Views

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 2023-03-05
    • 2018-01-26
    • 2020-09-24
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多