Laravel 10中Resource路由生成异常问题求助
问题原因
你错误地将包含URL参数的路径字符串(questionnaire_correction/{id})作为Route::resource的第一个参数,Laravel会把这个字符串整体识别为资源名称,导致生成的路由名称异常(如{questionnaireid}.create),而非预期的questionnaire_correction.create。
解决方案
方案1:继续使用手动定义路由(推荐,适配你的非标准路径)
你已编写的手动路由逻辑清晰、可正常工作,适合仅需两个路由的场景:
Route::get('/questionnaire_correction/{questionnaireid}', [QuestionnaireCorrectionController::class, 'create'])->name('questionnaire_correction.create'); Route::post('/questionnaire_correction/{questionnaireid}', [QuestionnaireCorrectionController::class, 'store'])->name('questionnaire_correction.store');
方案2:采用符合RESTful规范的嵌套资源路由
如果业务逻辑是为指定问卷创建批改记录,推荐使用嵌套资源路由,更贴合Laravel的RESTful设计:
// 基础嵌套路由定义 Route::resource('questionnaires.corrections', QuestionnaireCorrectionController::class)->only(['create', 'store']); // 可选:自定义路由参数名称(将默认的参数名改为你需要的questionnaireid) Route::resource('questionnaires.corrections', QuestionnaireCorrectionController::class) ->only(['create', 'store']) ->parameters([ 'questionnaires' => 'questionnaireid', 'corrections' => 'correctionid' ]);
生成的路由为:
GET|HEAD questionnaires/{questionnaireid}/corrections/create→ 路由名称questionnaires.corrections.createPOST questionnaires/{questionnaireid}/corrections→ 路由名称questionnaires.corrections.store
方案3:自定义Resource路由路径匹配你的需求
若坚持使用Route::resource且保留原路径,可通过route方法自定义每个路由的路径:
Route::resource('questionnaire_correction', QuestionnaireCorrectionController::class) ->only(['create', 'store']) // 自定义create和store的路由路径 ->route('create', 'questionnaire_correction/{questionnaireid}') ->route('store', 'questionnaire_correction/{questionnaireid}') // 指定预期的路由名称 ->names([ 'create' => 'questionnaire_correction.create', 'store' => 'questionnaire_correction.store', ]) // 可选:限制参数为数字类型 ->whereNumber('questionnaireid');
内容的提问来源于stack exchange,提问作者JanBoehmer
相关产品推荐
相关产品推荐

