سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ سید محمد سجاد آل محمد
ارور Mailable class does not exist
جامعه لاراول ایجاد شده در ۲۱ اردیبهشت ۱۳۹۹

دوستان من طبق فیلم رفتم جلو ولی این ارور رو میده که خودمون تعیین کردیم

Mailable class does not exist

کد فایل EmailType

<?php
namespace App\Service\Notifaction\constants;
use App\Mail\ForgetPassword;
use App\Mail\TopicCreated;
use App\Mail\UserRegistered;
use App\User;
class EmailType{
    const USER_REGISTERED = 1;
    const TOPIC_CREATED = 2;
    const FORGET_PASSWORD = 3;
        public static function toString(){
            return [
                self::USER_REGISTERED => 'ثبت نام کاربر',
                self::TOPIC_CREATED => 'ایجاد مقاله جدید',
                self::FORGET_PASSWORD => 'فراموشی رمز عبور',
            ];
        }
        public static function toMail($type)
        {
          try {
            return [
                self::USER_REGISTERED => UserRegistered::class,
                self::TOPIC_CREATED => TopicCreated::class,
                self::FORGET_PASSWORD => ForgetPassword::class
        ][$type];
          } catch (\Throwable $th) {
                throw new \InvalidArgumentException('Mailable class does not exist');
          }
        }
}

کد NotifactionController

<?php
namespace App\Http\Controllers;
use App\Service\Notifaction\constants\EmailType;
use App\Service\Notifaction\Notifaction;
use App\User;
use Illuminate\Http\Request;
class NotifactionController extends Controller
{
    public function email(){
        $users = User::all();
        $emailType = EmailType::toString();
        return view('notifaction.send-email' , compact('users' , 'emailType'));
    }
    public function sendEmail(Request $request){
            $request->validate([
                    'user' => 'integer | exists:users,id',
                    'email_type' => 'integer'
            ]);
            $notifaction = resolve(Notifaction::class);
                $maillable = EmailType::toMail($request->email_type);
                $notifaction->sendEmail(User::find($request->user) , new $maillable);
            }
}

 

سلام

مقدار email_type رو ببین چی بت میرسونه توی request یه چک بکن 

Amir Ahmadi ۲۱ اردیبهشت ۱۳۹۹، ۱۰:۱۵

توی فایل blade به این صورت باید باشه 

    <div class="form-group">
                    <div class="col-ms-12">
                        <label for="email_type">@lang('notification.email_type')</label>
                        <select class="form-control" name="email_type">
                            @foreach($emailType as $key => $type)
                                <option value="{{$key}}">{{$type}}</option>
                            @endforeach
                        </select>
                    </div>
                </div>

همچنین بهتره وقتی با compact دارید چند متغیر ارسال میکنید به صورت ارایه باشه 

 return view('notifaction.send-email' , compact(['users' , 'emailType']));

 

Amir Ahmadi ۲۱ اردیبهشت ۱۳۹۹، ۱۱:۲۴

من هرچی گشتم مشکلی پیدا نکردم

فایل blade

@extends('layouts.layout')
@section('title' , 'خانه')
@section('content')
        <div class="card">
            <div class="card-header">
                        @lang('not.send_email')
            </div>
            <div class="card-body">
                <form action="{{route('notifaction.send.email')}}" method="POST">
                   @csrf
                    <div class="form-group">
                        <label for="users">کاربر ها</label>
                        <select name="users" id="users" class="form-control">
                                @foreach($users as $user)
                            <option value="{{$user->id}}">{{$user->name}}</option>
                            @endforeach
                        </select>
                    </div>
                    <div class="form-group">
                        <label for="email">ایمیل ها</label>
                        <select name="email" id="email" class="form-control">
                            @foreach($emailTypes as $key => $type)
                            <option value="{{$key}}">{{$type}}</option>
                            @endforeach
                        </select>
                    </div>
                    @if($errors->any())
                    <ul>
                        @foreach($errors->all() as $error)
                                     <div class="small mb-2">
                            <li class="text-danager">{{$error}}</li>
                        </div>
                @endforeach
                    </ul>
                    @endif
                    <button name="send" class="btn btn-success">ارسال</button>
                </form>
            </div>
        </div>
    @endsection

 

سید محمد سجاد آل محمد ۲۱ اردیبهشت ۱۳۹۹، ۱۶:۵۳

حل شد 

سید محمد سجاد آل محمد ۲۳ اردیبهشت ۱۳۹۹، ۱۲:۱۵