我正在研究Laravel 5作为我的新框架,我正在关注拉克拉斯特的视频,我得到了一些奇怪的错误。我在我的控制器中显示简单的视图,但我得到的只是这个错误:
ModelNotFoundException in Builder.php line 125: No query results for model [App\Article].
这是我的一些代码:
路线:
Route::get('/', 'WelcomeController@index');
Route::get('home', 'HomeController@index');
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
Route::get('articles', 'ArticlesController@index');
Route::get('articles/{id}', 'ArticlesController@show');
Route::get('articles/create', 'ArticlesController@create'); //returns error page
ArticlesController.php
<?php namespace App\Http\Controllers;
use App\Article;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
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 'Hello World'; //display error messages
}
}
所以我很困惑,因为当我尝试访问create()方法时,Laravel也会读取show()方法。
这是对的吗?那么在路线列表中,Laravel会从上到下读取它的路线吗?
所以在我的路线中,为了防止错误,我应该首先在节目之前放置创建路线?
那应该是这样的吗?
Route::get('articles', 'ArticlesController@index');
Route::get('articles/create', 'ArticlesController@create'); //make it first?
Route::get('articles/{id}', 'ArticlesController@show');
答案 0 :(得分:3)
如果您尝试查找的模型不存在,ModelNotFoundException是从findOrFail
方法触发的数据库异常
检查此redirect-if-model-doesnt-exists-modelnotfoundexception-doesnt-work-for-me
答案 1 :(得分:0)
因为/ create也会触发show url / {any}
你应该按照你说的做,将创建路线放在节目路线上,或者使用
委派那些无聊的工作Route :: resource('article','ArticleController')
因此你得到一个modelNotFoundException,因为你正在寻找一篇id ='create'的文章