Метод index на контроллере вызывается, но не используется в контроллере - PullRequest
1 голос
/ 29 марта 2020

Я работаю над проектом Laravel и сталкиваюсь с проблемой, когда я не могу заставить работать свою страницу индекса без выдачи ошибки 404.

Я работаю над Сайт любительского авторства, который имеет базу данных историй - пользователь может загрузить текст или файл и т. д. c. У меня есть индексная страница, которая отображает все истории в длинной таблице. Вот страница и метод контроллера для его вызова:

Контроллер (показывает только соответствующий метод):

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index()
{
    $stories = Story::latest()->get();
    return view('stories.index', compact('stories'));
}

index.blade. php:

@extends('base')

@section('main')
    <div class="row">
        <div class="col-sm-12">
            <h1 class="display-3">Stories</h1>
            <table class="table table-striped">
                <thead>
                <tr>
                    <td>Story ID</td>
                    <td>Title</td>
                    <td>Author ID</td>
                    <td>Genre</td>
                    <td colspan = 2>Options</td>
                </tr>
                </thead>
                <tbody>
                @foreach($stories as $story)
                    <tr>
                        <td>{{$story->id}}</td>
                        <td>{{$story->title}}</td>
                        <td>{{$story->authorid}}</td>
                        <td>{{$story->genre1}}</td>
                        <td>
                            <a href="{{ route('stories.show', $story->id)}}" class="btn btn-primary">View</a>
                        </td>
                        <td>
                            <a href="{{ route('stories.edit', $story->id)}}" class="btn btn-primary">Edit</a>
                        </td>
                        <td>
                            <form action="{{ route('stories.destroy', $story->id)}}" method="post">
                                @csrf
                                @method('DELETE')
                                <button class="btn btn-danger" type="submit">Delete</button>
                            </form>
                        </td>
                    </tr>
                @endforeach
                </tbody>
            </table>
        </div>
    </div>
@endsection

Когда я пытаюсь получить доступ к этой странице, я получаю сообщение об ошибке 404. Я знаю, что раньше я мог получить к нему доступ, потому что он выдавал другие ошибки, связанные с базой данных, но когда они были исправлены, я получил 404. Я понятия не имею, где я мог пойти неправильно. В определении метода контроллера также говорится, что элемент не используется - почему он говорит об этом, я не знаю, поскольку на него явно ссылаются из файла маршрутов:

    Route::get('/', function () {
    return view('welcome');
});

Route::get('/soon', function () {
    return view('soon');
});

Route::resource('stories', 'StoryController');
Route::post('/stories', 'StoryController@store');
Route::get('stories/create', 'StoryController@create');
Route::get('stories/index', 'StoryController@index');

Любая помощь будет принята с благодарностью !

1 Ответ

1 голос
/ 29 марта 2020

Когда вы определяете resource маршруты, вам не нужно определять какой-либо другой маршрут CRUD, как сказано здесь

Laravel Маршрутизация ресурсов назначает типичный "CRUD" маршруты к контроллеру с одной строкой кода

...

Это объявление одного маршрута создает несколько маршрутов для обработки различных действий с ресурсом. В сгенерированном контроллере уже есть методы-заглушки для каждого из этих действий, включая примечания, информирующие вас о глаголах HTTP и URI, которые они обрабатывают.

Я предполагаю, что эти два маршрута, вероятно, сталкиваются друг с другом

Route::resource('stories', 'StoryController'); Route::get('stories/index', 'StoryController@index');

Поэтому вам не нужны следующие маршруты:

Route::post('/stories', 'StoryController@store'); Route::get('stories/create', 'StoryController@create'); Route::get('stories/index', 'StoryController@index');

Также убедитесь, что вы перенаправить на правильный вид в вашем каталоге. и если путь, если правильный

...