louisse
louisse

Reputation: 19

laravel function show in controller

I'm trying to show lessons from the course when i clicked on.

model lesson

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

model course

 public function lesson() {
   return $this->hasMany(Lesson::class);

}

show controller

 public function show($id)
{
    $cours = Course::findOrFailnd($id);
    $lessons = course::findOrFail($id)->lesson;
    return view('pages.lessons', compact('lessons', 'cours'));

}

page lesson

<div class="form-group">
    <strong>Lessons : </strong>
    @foreach ($lessons as $lesson )

    {{$lesson->long_text}}


    @endforeach
</div>

web routes

Route::resource('pages/lessons', 'LessonsController@show')->name('pages.lessons');

and i have this error:

Type error: Too few arguments to function Illuminate\Routing\PendingResourceRegistration::name(), 1 passed in C:\wamp64\www\learn2code\routes\web.php on line 21 and exactly 2 expected

Upvotes: 0

Views: 21381

Answers (2)

Levente Otta
Levente Otta

Reputation: 795

Model Course

public function lessons() {
    return $this->hasMany(Lesson::class);
}

Route

Route::get('pages/lessons/{course}', 'LessonsController@show')->name('pages.courses.lessons');

OR

Route::get('pages/courses/{course}/lessons', 'LessonsController@show')->name('pages.courses.lessons');

Controller show method

public function show(Course $course) {
    return view('pages.lessons', compact('course'));

}

page lesson

<div class="form-group">
    <strong>Lessons : </strong>
    @foreach ($course->lessons as $lesson)

        {{$lesson->long_text}}

    @endforeach
</div>

Upvotes: 0

Quezler
Quezler

Reputation: 2435

For resource controllers its names instead of name:

Naming Resource Routes

By default, all resource controller actions have a route name; however, you can override these names by passing a names array with your options:

Route::resource('photos', 'PhotoController')->names([
    'create' => 'photos.build'
]

Upvotes: 1

Related Questions