laravel route::post 调用了错误的方法

laravel route::post wrong method gets called

从一些背景信息开始,我有 3 个模型 - CoursePathwayModule

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 PathwayModule 时,它会到达 Route::post('/courses/{course}') 路线。

我尝试改变路线的顺序,但 none 成功了。我还确保创建表单操作是正确的 Url 路由。还是老样子

我也分不清调用了哪个控制器方法。尝试在 CourseController@createPathwaysController@createModulesController@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() }}