Laravel: доступ к функции пути в модели в индексном файле - PullRequest
0 голосов
/ 26 марта 2020

Я установил следующую функцию в моей модели:

  public function path() {
    return route('news.show', ['id' => $this->id, 'slug' => $this->slug]);
  }

Теперь я хотел бы получить доступ к этой функции в моем файле index.blade.php - вот так:

  @foreach ($articles as $article)
  <a href="{{ $article->path() }}">
    // rest of code goes here
  </a>
  @endforeach

Но когда я пытаюсь это сделать, я получаю следующую ошибку:

Facade\Ignition\Exceptions\ViewException
Missing required parameters for [Route: news.show] [URI: news/{id}/{slug}]. (View: C:\laragon\www\startup-reporter\resources\views\news\index.blade.php)

Вот как выглядят мои маршруты (web. php):

Route::get('news', 'NewsController@index')->name('news.index');
Route::get('news/create', 'NewsController@create')->name('news.create');
Route::get('news/{id}/{slug}', 'NewsController@show')->name('news.show');
Route::get('news/{id}/edit', 'NewsController@edit')->name('news.edit');

Route::post('news', 'NewsController@store')->name('news.store');
Route::put('news/{id}', 'NewsController@update');

А вот мой контроллер:

  // Index
  public function index() {
    $news = News::latest()->get();
    return view('news.index', ['articles' => $news]);
  }

  // Show
  public function show(News $id) {
    return view('news.show', compact('id'));
  }

Есть идеи, почему это не работает и что мне нужно сделать, чтобы это заработало?

Спасибо.

1 Ответ

0 голосов
/ 26 марта 2020

В вашем файле маршрутов вы определили 2 параметра, {id} и {slug}.

Но в вашем контроллере вы приняли только 1 параметр, $ id.

Вы должны изменить ваш метод шоу-контроллера, как это:

// Show
public function show(News $id, $slug) {
  return view('news.show', compact('id'));
}
...