我无法使用注册表将值存储在数据库中
我尝试了不同的方法,比如更改路由控制器,这里是我的 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');
}
};
问题出在无法识别控制器类的路由中。
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');