[英]Laravel 5.3 Notification Send Error
我想在Laravel 5.3应用程序中使用通知。 我的第一件事是尝试在新注册后立即发送“欢迎”通知。 阅读文档并遵循“ Laravel 5.3的新增功能”教程之后,保存记录后,我收到"Call to undefined method Illuminate\\Notifications\\Notification::send()"
错误。
以下信息是我尝试过的最新操作,但是我尝试的所有操作均失败。 当我将通知放在create方法下方时,我得到了保存,但是没有发送通知。 我把它放在前面只是为了看看会发生什么,因此是错误。
这是欢迎词:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use App\User;
class WelcomeToDStrokeTennis extends Notification
{
use Queueable;
protected $user;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(User $user)
{
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('MyApp Welcomes You.')
->action('Login To MyApp', 'http://dstroketennis.com')
->line('Thank you for trusting MyApp!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
RegisterController:
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Notifications\Notification;
use App\Notifications\WelcomeToMyApp;
class RegisterController extends Controller
{
use RegistersUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest');
}
protected function validator(array $data)
{
return Validator::make($data, [
'familyname' => 'required|max:255|unique:users',
'email' => 'required|email|max:255|unique:users',
'phone' => 'required|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
protected function create(array $data)
{
Notification::send($data, new WelcomeToDStrokeTennis($data));
return User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
}
}
更新:似乎我没有得到所需的User实例。 我认为这是因为类型数组。 我试图将新的用户数据收集到$ user变量中,但是现在它抛出错误:'调用数组中的成员函数'notify()'。 所以我想我仍然没有找到正确的类型。
protected function create(array $data)
{
$user = collect(User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]))->all();
$user->notify(new WelcomeToMyApp($user));
return $user;
}
更新:我仍在尝试查找User的实例。 我最近的尝试:
protected function create(array $data)
{
User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
$user = User::orderBy('created_at', 'desc')->first();
$user->notify(new WelcomeToMyApp($user));
return $user;
}
我收到错误:未定义的属性:App \\ Notifications \\ WelcomeToMyApp :: $ id。
更新...节日快乐!
我在执行dd($ users)时显示以下数据。 我在通知中添加了$ data参数。 我收到错误:
RegisterController.php第66行中的FatalThrowableError:类型错误:传递给App \\ Http \\ Controllers \\ Auth \\ RegisterController :: create()的参数2必须是App \\ User的实例,没有给出,在/ home / ubuntu / workspace /中调用第33行的vendor / laravel / framework / src / Illuminate / Foundation / Auth / RegistersUsers.php
protected function create(array $data, User $user)
{
User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
$user = User::orderBy('created_at', 'desc')->first();
//dd($user);
$user->notify(new WelcomeToMyApp($data));
return $user;
}
class WelcomeToDStrokeTennis extends Notification
{使用Queueable;
protected $user;
protected $data;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(array $data, User $user)
{
$this->data = $data;
$this->user = $user;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('MyApp Welcomes You.')
->greeting('You are now a registered user.')
->line('If you have not done so, please login and enter your player profile information')
->action('Login To D`Stroke Tennis', 'http://dstroketennis.com')
->line('Please call, text, or email if you have any problems or questions.');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
解:
protected function create(array $data)
{
$user = User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
$user->notify(new WelcomeToMyApp($user));
return $user;
}
这些参数也必须从通知类中删除,但这是用于此目的的代码。
通知外观的使用需要第一个参数作为可通知用户的集合,而不是提供请求数据,而应在下面传递用户集合更改
$user = User::create([
'familyname' => $data['familyname'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
$user->notify(new WelcomeToDStrokeTennis($data));
return $user;
这可能是因为Notification
是一个外观。 尝试使用
use Notification;
代替,
use Illuminate\Notifications\Notification;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.