@iiideb
Пишу роботов на html

Ошибка с Route::resource() в Laravel?

Происходит ошибка

Missing required parameters for [Route: post.show] [URI: post/{post}]. (View: E:\ospanel\OSPanel\domains\akademka\resources\views\posts\index.blade.php)

когда поменял маршруты с изначального значения
Route::get('post/', 'PostController@index')->name('post.index');
Route::get('post/show/{id}', 'PostController@show')->name('post.show');
Route::get('post/create', 'PostController@create')->name('post.create');
Route::get('post/edit/{id}', 'PostController@edit')->name('post.edit');
Route::post('post/', 'PostController@store')->name('post.store');
Route::patch('post/show/{id}', 'PostController@update')->name('post.update');
Route::delete('post/{id}', 'PostController@destroy')->name('post.destroy');

на маршрут
Route::resource('/post', 'PostController');
В контроллере все методы родные(если понадобятся, скину в комментарии)
Вот index.blade.php

@extends('layouts.layout')

@section('content')
  @if(isset($_GET['search']))
    @if( count($posts)>0)
      <h2>Результат поиска:</h2>
      <p class="lead">Всего найдено {{ count($posts) }} постов</p>
    @else
      <h2>По запросу <?php echo $_GET['search']?> ничего не найдено</h2>
      <a class="btn btn-outline-primary" href="{{ route('post.index') }}"> Все посты </a>
    @endif
  @endif

  <div class="row">
    @foreach($posts as $post)
    <div class="col-6">
      <div class="card">
        <div class="card-header"><h2>{{ $post->short_title }}</h2></div>
        <div class="card-body">
          <div class="card-img " style="background-image: url({{$post->img ?? asset('img/who.jpg')}})"></div>
          <div class="card-author">Автор: {{$post->name}}</div>
          <a href="{{route('post.show', ['id'=> $post->post_id])}}" class="btn btn-outline-primary">Посмотреть пост</a>
        </div>
      </div>
    </div>
    @endforeach
  </div>

  @if(!isset($_GET['search']))
  {{ $posts->links() }}
  @endif

@endsection

  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
@jazzus
В ресурсные маршруты не нужно передавать названия параметров.
route('posts.show', $post)
Т.е. либо ресурс либо его идентификатор если ресурса нет. Ларавел автоматом свяжет и в контроллере уже будет нужный ресурс
public function show(Post $post)
{
  dd($post);
}

Если key не id, а например slug то определить в модели так
protected $primaryKey = 'slug';
В бд не нужно давать префиксы для полей типа $post->post_id. Правильно делать $post->id, name, active и т.д. т.к. post всегда и так будет перед ними в названии переменной.
И ресурсы нужно называть не post, а posts в роутах
Route::resource('posts', 'PostController');
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Проще всего вместо route использовать action и передавать в него экземпляр модели:
action('PostController@show', $post);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы