我阅读了很多关于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
它有什么问题?请帮忙吗?
提前致谢
答案 0 :(得分:0)
在Route :: model中,您声明哪个变量将是模型实例,您不应该使用它来进行重定向。而不是那样,指定$game
类型为Game
,然后使用您的路线:
Route::model('game', 'Game');
...
Route::get('/games/edit/{game}', 'GamesController@edit');
然后,如果您访问/games/edit/3
GamesController :: edit将收到Game
类id=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);”的工作原理。