Уведомление Laravel не передает данные и получает ошибку «должно быть экземпляром App\\Notifications\\User»

avatar
Vinod Vishwakarma
8 апреля 2018 в 04:53
1766
2
1

Я пытаюсь использовать уведомление Laravel для отправки электронной почты, но получаю эту ошибку

{
    "message": "Type error: Argument 1 passed to App\\Notifications\\UserResetPasswordNotify::__construct() must be an instance of App\\Notifications\\User, instance of Illuminate\\Database\\Eloquent\\Collection given, called in /home/fy3bgmgte060/public_html/svs.com/app/Http/Controllers/Api/LoginController.php on line 143",
    "status_code": 500
}

Функция «Мой контроллер»

public function resendOTPTest(Request $request)
{
    $user = User::where(['mobile' => $request->mobile])->first();

    Notification::send($user, new UserResetPasswordNotify($user));   

    return response()->json(['message' => 'success','data' => 'OTP Sent', 'success' => true], 200);
}

мой файл уведомлений

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class UserResetPasswordNotify extends Notification
{
    use Queueable;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        $user = $this->user;
        return (new MailMessage)
            ->from('info@test.com')
            // ->name('Entrance India')
            ->subject('New OTP from SVS ')
            ->markdown('mail.userResetPassword', compact('user'));
    }

    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

этот идентификатор моей пользовательской модели

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Order;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
         'fname','lname', 'email','gender', 'password' 
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

при попытке использовать уведомление Laravel для отправки электронной почты, но возникает ошибка выше

То же самое работает для функции создания пользователя, но не работает для функции сброса пароля

Где я не прав?

Источник
Indrasinh Bihola
8 апреля 2018 в 09:20
1

В файл уведомления добавьте use App\User;.

Ответы (2)

avatar
Ashutosh Sharma
8 апреля 2018 в 10:34
1

Включить класс User в свой класс Notification

Вы Инъекционные User Dependency в Typehint к Магия Метод __Cunstructor в ваш Notification классы.
Вы должны убедиться, что Class доступен там.
Просто используйте это в своем классе Notification.

use App\User

avatar
Sumit Parkash
8 апреля 2018 в 05:07
1

Вам нужно добавить использовать Приложение\Пользователь в файле уведомлений.