Контактная форма Laravel 9.x не может подключиться к классу

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

Я следовал руководству -> https://www.positronx.io/laravel-contact-form-example-tutorial/

Когда я попытался получить доступ к классам на своем контроллере, он не смог его найти.

Контроллер говорит это

Но у меня есть файл здесь

Когда я запускаю код, у меня есть это -> Невозможно создать экземпляр абстрактного класса Illuminate\Database\Eloquent\Model

ContactUsFormController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use app\Models\Contact;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Mail;

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');
    }
}

Это заставляет меня задуматься. В туториале он не написал ни одного кода в этот файл, но все равно вызывал класс оттуда. приложение\Почта\contact.php

<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class contact extends Mailable
{
    use Queueable, SerializesModels;
    public function __construct()
    {
        //
    }
  public function build()
    {
        return $this->view('view.name');
    }
}

приложение\Модели\Контакт.php

namespace App\Mail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
{
    use HasFactory;
    public $fillable = ['name', 'email', 'subject', 'message'];

}

У меня опечатка? Что мне не хватает? Извините, я новичок

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Что нового в PHP 8.1?
Что нового в PHP 8.1?
Если вы все еще используете PHP 7, то эта статья для вас. В PHP 8, а именно в PHP 8.1, встроены некоторые очень востребованные функции, которые вам...
Разработка LMS на заказ для повышения эффективности работы и обучения
Разработка LMS на заказ для повышения эффективности работы и обучения
За последние годы в образовании произошла большая революция, и сегодня почти все учебные заведения делают упор на эксклюзивное управление учебным...
0
0
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

проблема, которую вы называете Model::create(); моделью, - это просто абстрактный класс, а не ваша конкретная модель

заменять

Model::create($req->All());

с

Contact::create($req->All());

также измените namespace App\Mail; в вашей модели контактов на пространство имен App\Models;

чтобы узнать больше о Почтовом фасаде, проверьте это

https://laravel.com/docs/9.x/mail#отправка-почты

Я надеюсь, что это полезно

Он по-прежнему говорит, что приложение неопределенного типа \ Models \ Contact for Contact::create($req->All()); Я начинаю думать, может быть, это что-то о пространствах имен? что ты думаешь? Потому что он использует одно и то же пространство имен для обоих файлов контактов.

NervousDev 09.04.2022 14:53

@NervousDev да, измените namespace App\Mail; в своей модели контактов на namespace App\Models;

Ahmed Hassan 09.04.2022 14:55

Ладно, я понял логику. У меня есть еще один вопрос. Поскольку я вызываю класс Mail::send(') на app\Mails\contact.php, у меня нет класса с именем send() Как добавить make, как это работает в учебнике?

NervousDev 09.04.2022 15:04

send() - это метод, а не класс, и вы используете Почтовый фасад, а не контактный почтовый ящик, проверьте этот laravel.com/docs/9.x/mail#отправка почты

Ahmed Hassan 09.04.2022 15:11

Это не полностью решило мою проблему из-за моего незавершенного кода, но если вы отредактируете свой ответ с пространствами имен и упомянутыми фьючерсами, я могу принять это как ответ.

NervousDev 09.04.2022 16:02

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

Ahmed Hassan 09.04.2022 16:11

Да, я так думаю. Я решил узнать больше о структуре mvc, прежде чем углубляться в подобные вещи. Спасибо за помощь.

NervousDev 09.04.2022 17:12

Другие вопросы по теме