繁体   English   中英

Laravel 5.3通知发送错误

[英]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

dd($ user)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM