我正在开发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);
}
}
现在,当我成功下单时,我不会收到通知。由于我是第一次使用该通知,因此我想知道我错过了什么。如果有人可以指出这一点并告诉我如何解决它,则表示赞赏。
答案 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
字段中包含正确的电子邮件地址。
希望有帮助!