I’m trying to make a contact form. Main idea is user will send data, I will save the data to database, I will get the data from database, I will send the data as an email.
I was following a tutorial -> https://www.positronx.io/laravel-contact-form-example-tutorial/
When I tried to reach classes on my controller it can not find it.
When I run the code I’m having this -> Cannot instantiate abstract class IlluminateDatabaseEloquentModel
ContactUsFormController.php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use appModelsContact;
use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesMail;
class ContactUsFormController extends Controller
{
//create contact form
public function createForm(Request $req){
return view('contact');
}
//store contact form data
public function ContactUsForm(Request $req){
//form validation
$this->validate($req,[
'name' => 'required',
'email' => 'required | email',
'subject' => 'required',
'message' => 'required'
]);
//store data in database
Model::create($req->All());
//send mail to admin
Mail::send('mail',array(
'name' => $req->get('name'),
'email' => $req->get('email'),
'subject' => $req->get('subject'),
'message' => $req->get('message')
),function($message) use ($req){
$message->from($req->email);
$message->to('MyMail@example.com','admin')->subject($req->get('subject'));
});
return back()->with('success', 'We have recieved your message');
}
}
This one making me thinking. In the tutorial he didn’t write a single code into this file but still calling a class from there. appMailscontact.php
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldQueue;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
class contact extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function build()
{
return $this->view('view.name');
}
}
appModelsContact.php
namespace AppMail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Contact extends Model
{
use HasFactory;
public $fillable = ['name', 'email', 'subject', 'message'];
}
Do I have a typo? What I am missing? Sorry I’m a beginner
Advertisement
Answer
the issue you call Model::create();
model is just an abstract class, not your concrete model
replace
Model::create($req->All());
with
Contact::create($req->All());
also change namespace AppMail;
in your Contact model to namespace AppModels;
to know more information about Mail facade check this
https://laravel.com/docs/9.x/mail#sending-mail
I hope it’s useful