You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel点击课程展示课时报错:路由name方法参数不足

解决点击课程展示对应课时的功能问题及路由错误修复

我来帮你一步步搞定这个问题,先从直接触发报错的路由问题入手,再顺带着修正代码里的其他小疏漏,让功能正常跑起来。

1. 先修掉路由的致命错误

你当前的路由写法完全不符合Laravel的规范,这也是报错的直接原因:

Type error: Too few arguments to function Illuminate\Routing\PendingResourceRegistration::name(), 1 passed...

错误点拆解:

  • Route::resource的第二个参数必须是控制器的完整类名,不能写成LessonsController@show这种格式
  • name()方法对于资源路由来说,需要传入数组参数(或者你应该用names()方法),单独传一个字符串肯定会参数不够

正确的路由写法(二选一)

选项一:用普通GET路由(更贴合你的需求,因为你只需要展示课时的功能)

// 定义路由:传入课程ID,指向控制器的show方法
Route::get('courses/{course}/lessons', 'LessonsController@show')->name('courses.lessons');

选项二:如果一定要用资源路由(其实没必要,因为你只用到show方法)

// resource的第二个参数是控制器类名,用names()自定义路由名称前缀
Route::resource('courses/lessons', 'LessonsController')->names([
    'show' => 'courses.lessons'
]);

2. 修正控制器里的拼写与逻辑问题

你的show方法里有两处明显的错误,还有可以优化的地方:

// 原错误代码
public function show($id) {
    $cours = Course::findOrFailnd($id); // 拼写错误:findOrFailnd → findOrFail
    $lessons = course::findOrFail($id)->lesson; // 类名小写+关联方法单数,不符合规范
    return view('pages.lessons', compact('lessons', 'cours'));
}

修正后的控制器代码

use App\Course; // 确保顶部引入Course模型

public function show($id) {
    // 预加载课时关联,避免N+1查询问题,提升性能
    $course = Course::with('lessons')->findOrFail($id);
    // 直接从预加载的关联中获取课时
    $lessons = $course->lessons;
    return view('pages.lessons', compact('lessons', 'course'));
}

同时建议把Course模型的关联方法改成复数,符合Laravel的命名规范:

// Course模型里的关联方法,从lesson改成lessons(复数)
public function lessons() {
    return $this->hasMany(Lesson::class);
}

Lesson模型的关联是正确的,保持不变即可:

public function course() {
    return $this->belongsTo(Course::class);
}

3. 视图代码优化(让展示更友好)

原视图只是简单输出文本,你可以改成列表形式,可读性更强:

<div class="form-group">
    <strong>Lessons :</strong>
    <ul class="mt-2">
        @foreach ($lessons as $lesson )
            <li>{{ $lesson->long_text }}</li>
        @endforeach
    </ul>
</div>

4. 前端跳转补充(如何点击课程进入课时页面)

假设你有课程列表页面,每个课程的跳转链接应该这样写:

<!-- 课程列表中的每个课程链接,传入对应课程的ID -->
<a href="{{ route('courses.lessons', ['course' => $course->id]) }}">查看{{ $course->name }}的课时</a>

这样点击课程链接后,就能跳转到对应的课时页面,展示该课程下的所有课时了。

内容的提问来源于stack exchange,提问作者louisse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:07:15