1

从一些背景信息开始,我有 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使用PathwayorModule时,它会到达Route::post('/courses/{course}')路线。

我尝试改变路线的顺序,但都没有奏效。我还确保创建表单操作是正确的 Url Route。它仍然是一样的。

我也无法分辨正在调用哪个控制器方法。尝试做一个dd()on CourseController@create, PathwaysController@createModulesController@create但没有一个被击中。

任何有关为什么会发生这种情况的帮助将不胜感激


编辑

这是我的一些路线: 在此处输入图像描述

4

2 回答 2

2

由于您的网址非常相似。如何重构您的 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以查看您的路线

于 2022-01-21T16:02:15.170 回答
0

修复。事实证明我的路线根本没有问题。

问题是我在该页面上有垂直导航和选项卡窗格,其中大多数都有一个表单。我没有在其中一个选项卡窗格中关闭表单,因此该表单正在提交给该页面中上述表单的操作。

即确保使用以下方法关闭表单:

{{ Form::close() }}
于 2022-01-26T09:15:25.103 回答