laravel route::post 调用了错误的方法
laravel route::post wrong method gets called
从一些背景信息开始,我有 3 个模型 - Course
、Pathway
、Module
。
Course
有很多 Pathway
Pathway
有很多 Module
Course
已通过 Module
(通过 Pathway
)
我已经设置了创建课程、途径和模块的路径。但是,当我尝试保存新创建的模型实例时,它调用了错误的路由方法 - 甚至没有点击相关控制器
的 store
方法
我知道路线的顺序很重要。我试着改变它们,但它仍然没有按预期工作。
这是我目前所拥有的
:
// modules
Route::get('/courses/{course}/edit/pathways/{pathway}/modules/create', [App\Http\Controllers\ModulesController::class, 'create'])->name('createModule');
Route::post('/courses/{course}/edit/pathways/{pathway}/modules', [App\Http\Controllers\ModulesController::class, 'store'])->name('storeModule');
// Pathways
Route::get('/courses/{course}/edit/pathways/create', [App\Http\Controllers\PathwaysController::class, 'create'])->name('createPathway');
Route::get('/courses/{course}/pathways/{pathway}/edit', [App\Http\Controllers\PathwaysController::class, 'edit'])->name('editPathway');
Route::delete('/courses/{course}/pathways/{pathway}', [App\Http\Controllers\PathwayController::class, 'destroy'])->name('destroyPathway');
Route::post('/courses/{course}/edit/pathways', [App\Http\Controllers\PathwaysController::class, 'store'])->name('storePathway');
// VQs/Qualifications
Route::resource('courses', App\Http\Controllers\CourseController::class, [
'names' => [
'index' => 'allCourses',
'create' => 'createCourse',
'store' => 'storeCourse',
'show' => 'showCourse',
'edit' => 'editCourse',
'update' => 'updateCourse',
'destroy' => 'destroyCourse',
]
]);
问题是,当我尝试 store
Pathway
或 Module
时,它会到达 Route::post('/courses/{course}')
路线。
我尝试改变路线的顺序,但 none 成功了。我还确保创建表单操作是正确的 Url 路由。还是老样子
我也分不清调用了哪个控制器方法。尝试在 CourseController@create
、PathwaysController@create
、ModulesController@create
上执行 dd()
,但 none 被击中。
任何关于为什么会发生这种情况的帮助将不胜感激
编辑
这是我的一些路线:
因为你们的 URL 很相似。
重构你的 URL.
怎么样?
此外,编写更简洁的代码可以让您省去很多麻烦。
顶部:
<?php
use App\Http\Controllers\ModulesController;
use App\Http\Controllers\PathwaysController;
Route::name('modules.')->prefix('modules/courses')->group(function()
Route::get(
'{course}/edit/pathways/{pathway}/create', //e.g: modules/courses/engligh/edit/pathways/languages/create
[ModulesController::class, 'create']
)->name('create'); //modules.create
Route::post(
'{course}/edit/pathways/{pathway}',
[App\Http\Controllers\ModulesController::class, 'store']
)->name('store'); //modules.store
});
Route::name('courses.')->prefix('courses')->group(function()
Route::get(
'{course}/edit/pathways/create', //e.g: courses/english/edit/pathways/create
[PathwaysController::class, 'create']
)->name('create'); //courses.create
Route::get(
'{course}/pathways/{pathway}/edit',
[App\Http\Controllers\PathwaysController::class, 'edit']
)->name('edit');//courses.edit
Route::delete(
'{course}/pathways/{pathway}',
[App\Http\Controllers\PathwayController::class, 'destroy']
)->name('destroy');//courses.destroy
Route::post(
'{course}/edit/pathways',
[App\Http\Controllers\PathwaysController::class, 'store']
)->name('store');//courses.store
});
运行 php artisan route:list
查看您的路线
已修复。事实证明我的路线根本没有问题。
问题是我在该页面上有垂直导航和 tab-panes,其中大部分都有一个表单。我没有关闭其中一个 tab-panes 中的表单,因此该表单已提交给该页面中上述表单的操作。
即确保使用以下方式关闭表单:
{{ Form::close() }}
从一些背景信息开始,我有 3 个模型 - Course
、Pathway
、Module
。
Course
有很多 Pathway
Pathway
有很多 Module
Course
已通过 Module
(通过 Pathway
)
我已经设置了创建课程、途径和模块的路径。但是,当我尝试保存新创建的模型实例时,它调用了错误的路由方法 - 甚至没有点击相关控制器
的store
方法
我知道路线的顺序很重要。我试着改变它们,但它仍然没有按预期工作。
这是我目前所拥有的 :
// modules
Route::get('/courses/{course}/edit/pathways/{pathway}/modules/create', [App\Http\Controllers\ModulesController::class, 'create'])->name('createModule');
Route::post('/courses/{course}/edit/pathways/{pathway}/modules', [App\Http\Controllers\ModulesController::class, 'store'])->name('storeModule');
// Pathways
Route::get('/courses/{course}/edit/pathways/create', [App\Http\Controllers\PathwaysController::class, 'create'])->name('createPathway');
Route::get('/courses/{course}/pathways/{pathway}/edit', [App\Http\Controllers\PathwaysController::class, 'edit'])->name('editPathway');
Route::delete('/courses/{course}/pathways/{pathway}', [App\Http\Controllers\PathwayController::class, 'destroy'])->name('destroyPathway');
Route::post('/courses/{course}/edit/pathways', [App\Http\Controllers\PathwaysController::class, 'store'])->name('storePathway');
// VQs/Qualifications
Route::resource('courses', App\Http\Controllers\CourseController::class, [
'names' => [
'index' => 'allCourses',
'create' => 'createCourse',
'store' => 'storeCourse',
'show' => 'showCourse',
'edit' => 'editCourse',
'update' => 'updateCourse',
'destroy' => 'destroyCourse',
]
]);
问题是,当我尝试 store
Pathway
或 Module
时,它会到达 Route::post('/courses/{course}')
路线。
我尝试改变路线的顺序,但 none 成功了。我还确保创建表单操作是正确的 Url 路由。还是老样子
我也分不清调用了哪个控制器方法。尝试在 CourseController@create
、PathwaysController@create
、ModulesController@create
上执行 dd()
,但 none 被击中。
任何关于为什么会发生这种情况的帮助将不胜感激
编辑
这是我的一些路线:
因为你们的 URL 很相似。 重构你的 URL.
怎么样?此外,编写更简洁的代码可以让您省去很多麻烦。
顶部:
<?php
use App\Http\Controllers\ModulesController;
use App\Http\Controllers\PathwaysController;
Route::name('modules.')->prefix('modules/courses')->group(function()
Route::get(
'{course}/edit/pathways/{pathway}/create', //e.g: modules/courses/engligh/edit/pathways/languages/create
[ModulesController::class, 'create']
)->name('create'); //modules.create
Route::post(
'{course}/edit/pathways/{pathway}',
[App\Http\Controllers\ModulesController::class, 'store']
)->name('store'); //modules.store
});
Route::name('courses.')->prefix('courses')->group(function()
Route::get(
'{course}/edit/pathways/create', //e.g: courses/english/edit/pathways/create
[PathwaysController::class, 'create']
)->name('create'); //courses.create
Route::get(
'{course}/pathways/{pathway}/edit',
[App\Http\Controllers\PathwaysController::class, 'edit']
)->name('edit');//courses.edit
Route::delete(
'{course}/pathways/{pathway}',
[App\Http\Controllers\PathwayController::class, 'destroy']
)->name('destroy');//courses.destroy
Route::post(
'{course}/edit/pathways',
[App\Http\Controllers\PathwaysController::class, 'store']
)->name('store');//courses.store
});
运行 php artisan route:list
查看您的路线
已修复。事实证明我的路线根本没有问题。
问题是我在该页面上有垂直导航和 tab-panes,其中大部分都有一个表单。我没有关闭其中一个 tab-panes 中的表单,因此该表单已提交给该页面中上述表单的操作。
即确保使用以下方式关闭表单:
{{ Form::close() }}