尽管有文档和示例,但Laravel 4路由模型绑定异常并不起作用

时间:2014-08-22 08:22:07

标签: laravel laravel-4

我阅读了很多关于Laravel4路线模型绑定(L4文档,教程等)的内容,但仍然例外(即未找到模型)不适合我

这些是我的基本文件

routes.php文件:

Route::model('game', 'Game', function(){
    // override default 404 behavior if model not found, see Laravel docs        
    return Redirect::to('/games');
});
...
Route::get('/games/edit/{game}', 'GamesController@edit');

GamesController.php

class GamesController extends BaseController {
    ...
    public function edit(Game $game){
        return View::make('/games/edit', compact('game'));
    }
}

非常直接,但我收到此错误:Argument 1 passed to GamesController::edit() must be an instance of Game, instance of Illuminate\Http\RedirectResponse given

如果我输入http://mysite.dev/games/edit/1一切正常(ID = 1的模型存在)

如果我输入http://mysite.dev/games/edit/12345(没有带有该ID的模型),则会触发上面的丑陋错误,而不是我指定的重定向

我也看了这个(建议使用Redirect闭包的底部部分:这就是我正在做的事情!)但是没办法让它工作:laravel 4 handle not found in Route::model

它有什么问题?请帮忙吗?

提前致谢

3 个答案:

答案 0 :(得分:0)

在Route :: model中,您声明哪个变量将是模型实例,您不应该使用它来进行重定向。而不是那样,指定$game类型为Game,然后使用您的路线:

Route::model('game', 'Game');
...
Route::get('/games/edit/{game}', 'GamesController@edit');

然后,如果您访问/games/edit/3 GamesController :: edit将收到Gameid=3

的实例

答案 1 :(得分:0)

我最后设置了一个通用的“Not Found”错误捕获器,如下所示:

// routes.php
App::error(function(Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e) {
    return Response::make('Not Found', 404);
});
...
Route::model('game', 'Game');
...
Route::get('/games/edit/{game}', 'GamesController@edit');

我理解的是,如果我想要一个自定义重定向而不是一般的404页面(即如果找不到模型,则将用户带到游戏列表中),我不能使用该路由 - 模型结合

换句话说,我必须使用Route::get('/games/edit/{id}', 'GamesController@edit');,然后在'edit'方法中执行我的应用程序逻辑:

public function edit($id){
    $game = Game::findOrFail($id);
    // if fails then redirect to custom page, else go on saving
}

答案 2 :(得分:0)

我对Laravel很新,但据我所知,这与闭包无关,而是在闭包内使用“Redirect :: to”。使用“App :: abort(404);”的工作原理。