在成功事件上发送电子邮件通知

时间:2019-07-18 11:16:46

标签: php laravel-5.8

我正在开发Laravel 5.8 API应用程序,该应用程序需要在用户成功下订单时通知用户。订单过程正常,但是我没有收到电子邮件通知。这就是我使用mailtrap进行演示的方式

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=**************
MAIL_PASSWORD=**************
MAIL_ENCRYPTION=tls

在订购模型中,我使用的是应通报特征

<?php

namespace App;

use App\User;
use App\Product;
use Illuminate\Notifications\Notifiable;

use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    use Notifiable;

    ...
}

创建了OrderSuccesful通知,并在OrderController存储方法中使用了该通知

<?php

...

use App\Notifications\OrderSuccessful;

use App\Order;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function store(Request $request, Product $product)
    {
        // create order
        $order = Order::create([
            'user_id'       => auth()->user()->id,
            'product_id'    => $product->id,
            'barrels'       => $request->barrels,
            'status'        => 'successful'
        ]);

        $user = auth()->user();

        // notify user of successful order
        $user->notify(new OrderSuccessful($order));

        return new OrderResource($order);
    }
}

现在,当我成功下单时,我不会收到通知。由于我是第一次使用该通知,因此我想知道我错过了什么。如果有人可以指出这一点并告诉我如何解决它,则表示赞赏。

1 个答案:

答案 0 :(得分:1)

在这里,您需要将Notifiable特征添加到User模型中,而不是Order

User.php

class User extends Authenticatable
{
    use Notifiable;
    //
}

使用OrderSuccessful创建一个artisan通知类:

php artisan make:notification OrderSuccessful

OrderSuccessful类中:

protected $order;

public function __construct(App\Order $order)
{
    $this->order = $order;
}

设置完上述所有内容后,您现在应该可以使用以下代码触发电子邮件:

$user->notify(new OrderSuccessful($order));


注意:

确保您的users表中的email字段中包含正确的电子邮件地址。

希望有帮助!