用于路由的Builder.php中的Laravel 5 ModelNotFoundException

Bij*_*oor 4 laravel laravel-routing laravel-5

我有一个名为Article.php的Model Class, 并使用下面的rout:

Route::get('articles/create','ArticlesController@create');
Run Code Online (Sandbox Code Playgroud)

当在浏览器中输入http:// localhost:8000/articles/create时, 我看到此错误: Builder.php第125行中的ModelNotFoundException:模型[App\Article]没有查询结果.

但是当我用户下面的每一个想法都没问题时:(文章放入文章s)

Route::get('article/create','ArticlesController@create');
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

class ArticlesController extends Controller {

    public function index()
    {
        $articles = Article::all();

        return view('articles.index',compact('articles'));
    }


    public function show($id)
    {
        $article = Article::findOrFail($id);

        return view('articles.show',compact('article'));
    }

    public function create()
    {
        return view('articles.create');
    }
}
Run Code Online (Sandbox Code Playgroud)

真的发生了什么?!!!

Aze*_*ame 13

你的代码的问题是你的routes.php你的路由优先级是这样的:

Route::get('articles/{id}','ArticlesController@show');
Route::get('articles/create','ArticlesController@create');
Run Code Online (Sandbox Code Playgroud)

当你在浏览器中访问http:// localhost:8000/articles/create时,la lavel catches创建一个带{id}请求的变量,articles/{id}然后才有articles/create机会解析路由.要解决您的问题,您必须考虑路由优先级并对route.php文件进行以下更改:

Route::get('articles/create','ArticlesController@create');
Route::get('articles/{id}/edit','ArticlesController@show');
Route::get('articles/{id}','ArticlesController@show');
Run Code Online (Sandbox Code Playgroud)

但是如果你在routes.php文件中有很多这些,你应该考虑使用它:

Route::resource('articles', 'ArticlesController');
Run Code Online (Sandbox Code Playgroud)

这一行将处理所有4个获取路由(索引,创建,编辑,显示)以及(存储,更新,删除)的所有三个发布/放置/删除路由.

但是每个人都有自己的.