دوستان من طبق فیلم رفتم جلو ولی این ارور رو میده که خودمون تعیین کردیم
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 یه چک بکن
توی فایل 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']));
من هرچی گشتم مشکلی پیدا نکردم
فایل 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