Laravel 9自定义请求CreateCarRequest无法进入控制器方法问题
Laravel自定义请求类无法进入控制器方法问题
我尝试在Laravel中使用自定义请求(custom requests),但找不到问题所在,已查阅官方文档及多语种教程。
我通过以下命令创建了CreateCarRequest类:
php artisan make:request CreateCarRequest
我的CreateCarRequest.php代码如下:
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class CreateCarRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; // TODO autorizaion logic } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules(): array { return [ 'plate' => 'required|string|max:255|unique:cars,plate', 'brand' => 'required|string|max:255', 'model' => 'required|string|max:255', 'seats' => 'required|integer|min:0', // TODO discuss min 0 or 1? 'fuel' => 'required|string|max:255', 'priceRent' => 'required|numeric|min:0', 'type' => 'required|string|max:255', 'smoke' => 'required|boolean', 'pet' => 'required|boolean', 'airConditioner' => 'required|boolean', 'parkSensor' => 'required|boolean', 'bluetooth' => 'required|boolean' ]; } }
使用该请求类的CarsController.php代码如下:
<?php namespace App\Http\Controllers; use App\Http\Requests\CreateCarRequest; use App\Http\Requests\EditCarRequest; use App\Models\Car; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Facades\Log; class CarsController extends Controller { public function show() { $cars = Car::paginate(10); return view('cars.adminCars', ['cars' => $cars ]); } public function create() { return view('cars.adminCarCreate'); } public function confirmCreate(CreateCarRequest $request): RedirectResponse { Log::info('IN CONFIRM CREATE FUNCTION'); // debugging $validatedData = $request->validated(); Log::info($validatedData); return redirect()->action([CarsController::class, "create"]); } }
我的问题是始终无法进入confirmCreate方法,通过日志验证发现无任何日志记录。已尝试相关Stack Overflow帖子中的所有解决方案,但均无效。
排查建议
- 检查路由配置:确认
confirmCreate对应的路由规则正确,请求方式(如POST)与表单提交方式一致,无拼写错误 - 查看验证错误:在
adminCarCreate.blade.php视图中添加错误提示代码,验证失败时Laravel会自动重定向并携带错误信息:@if($errors->any()) <div class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif - 核对表单字段:确保表单中输入框的
name属性与验证规则里的字段完全匹配(如priceRent、airConditioner等驼峰命名字段) - 清除缓存:执行以下命令清理配置和路由缓存:
php artisan config:clear php artisan route:clear - 检查命名空间:确认
CreateCarRequest的命名空间App\Http\Requests正确,控制器中的导入语句无拼写错误 - 查看系统日志:前往
storage/logs/laravel.log查看是否有验证失败、路由匹配错误等相关日志记录
内容的提问来源于stack exchange,提问作者Erik Avagyan
相关产品推荐
相关产品推荐

