在学生表中提交表单时刷新页面而不是将值存储在数据库表中(验证失败)

问题描述 投票:0回答:1

我无法使用注册表将值存储在数据库中

我尝试了不同的方法,比如更改路由控制器,这里是我的 Student.php 模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'email',
        'phone_number',
        'address',
        'select_course',
        'highest_qualification',
        'cv_file'
    ];

    public function courses()
    {
        return $this->belongsToMany(Course::class);
    }
}

这是我的路线 web.php

<?php
use App\Http\Controllers\StudentController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CustomAuthController;

    Route::get('/register', function () {
    return view('/register');
});

Route::post('/students',[StudentController::class,'store'])->name('students.store');
Route::get('/students', [StudentController::class,'index'])->name('students.index');
Route::get('/students/create', [StudentController::class,'create'])->name('students.create');
Route::get('/students/{id}', [StudentController::class,'show'])->name('students.show');
Route::get('/students/{id}/edit', [StudentController::class,'edit'])->name('students.edit');
Route::put('/students/{id}', [StudentController::class,'update'])->name('students.update');
Route::delete('/students/{id}', [StudentController::class,'destroy'])->name('students.destroy');

这是我的 StudentController

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Student;
use App\Models\Course;

class StudentController extends Controller
{
    public function index()
    {
        $students = Student::all();
        return view('students.index', compact('students'));
    }

    public function create()
    {
        $courses = Course::all();
        return view('students.create', compact('courses'));
    }

    public function store(Request $request)
    {
       
        $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:students,email',
            'phone_number' => 'required',
            'address' => 'required',
            'select_course' => 'required',
            'highest_qualification' => 'required',
            'cv_file' => 'required|file|max:10240',
        ]);

        $cv_file = $request->file('cv_file');
        $cv_file_path = $cv_file->store('cv_files');

        $student = new Student([
            'name' => $request->get('name'),
            'email' => $request->get('email'),
            'phone_number' => $request->get('phone_number'),
            'address' => $request->get('address'),
            'select_course' => $request->get('select_course'),
            'highest_qualification' => $request->get('highest_qualification'),
            'cv_file' => $cv_file_path,
        ]);
        $student->save();
       
        dd($request);

        $student->courses()->attach($request->get('courses'));

        return redirect('/students')->with('success', 'Student has been added');
    }

    public function show($id)
    {
        $student = Student::find($id);
        return view('students.show', compact('student'));
    }

    public function edit($id)
    {
        $student = Student::find($id);
        $courses = Course::all();
        return view('students.edit', compact('student', 'courses'));
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:students,email,'.$id,
            'phone_number' => 'required',
            'address' => 'required',
            'select_course' => 'required',
            'highest_qualification' => 'required',
            'cv_file' => 'nullable|file|max:10240',
        ]);

        $student = Student::find($id);

        if ($request->hasFile('cv_file')) {
            $cv_file = $request->file('cv_file');
            $cv_file_path = $cv_file->store('cv_files');
            $student->cv_file = $cv_file_path;
        }

        $student->name = $request->get('name');
        $student->email = $request->get('email');
        $student->phone_number = $request->get('phone_number');
        $student->address = $request->get('address');
        $student->select_course = $request->get('select_course');
        $student->highest_qualification = $request->get('highest_qualification');
        $student->save();

        $student->courses()->sync($request->get('courses'));

        return redirect('/students')->with('success', 'Student has been updated');
    }

    public function destroy($id)
    {
        $student = Student::find($id);
        $student->delete();
 
        return redirect('/students')->with('success', 'Student has been deleted successfully');
    }
}

我正在使用 register.blade.php 文件,我在其中制作了一个表格来注册新候选人 我在注册表中使用的这条路线。当我点击提交按钮时,它会刷新

`<form
      method="POST" action="{{ route('students.store') }}">
      @csrf
`

这是我点击注册新候选人的仪表板

`<a class="inline-block text-gray-400 no-underline hover:text-gray-200 hover:text-underline py-2 px-4" href="{{ url('/register') }}">Register a new candidate</a>`

这是我的 students_table 迁移

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateStudentsTable extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('students', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('phone_number')->nullable();
            $table->string('address')->nullable();
            $table->string('select_course');
            $table->string('highest_qualification')->nullable();
            $table->string('cv_file')->nullable();
            $table->timestamps();

        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('students');
    }
};
laravel database model database-migration
1个回答
0
投票

问题出在无法识别控制器类的路由中。

Route::get('/students', 'StudentController@index')->name('students.index'); 

这条路线中的

StudentController
必须确定它的命名空间是什么。

App\Providers\RouteServiceProvider
文件中有一个名为
$namespace
的属性。这必须是
 App\Http\Controllers
或您的控制器所在的任何地方。

如果您使用的是较新版本的 laravel,则还有另一种定义路由的语法:

use App\Http\Controllers\StudentController ;
Route::get('/students', [StudentController::class,'index'])->name('students.index'); 
© www.soinside.com 2019 - 2024. All rights reserved.