1

我正在做一个 Laravel 项目,我遇到了一个问题,我无法在不引发 404 错误的情况下让我的索引页面正常工作。

我在一个业余创作网站上工作,该网站有一个故事数据库——用户可以上传文本或文件等。我有一个索引页面,在一个长表中显示所有故事。这是页面和调用它的控制器方法:

控制器(仅显示相关方法):

/**
 * 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');

任何帮助将不胜感激!

4

1 回答 1

1

当您定义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');

此外,请确保您重定向到目录中的正确视图。如果路径正确

于 2020-03-29T12:38:08.683 回答