laravel如何处理它的路线?

时间:2015-05-07 07:37:56

标签: php laravel

我正在研究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');

2 个答案:

答案 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'的文章