我有一个应用程序需要在RouteServiceProvider.php中完成此任务:
//in \App\Providers\RouteServiceProvider.php
public function boot(Router $router)
{
//
parent::boot($router);
//somehow can get the current action
$action = $router->getCurrentAction();
if($action == 'edit'){
$router->model('articles','App\Article');
} else{
$router->bind('articles', function($id){
return Article::published()->findOrFail($id);
});
}
}
这是我的路线:
Route::resource('articles', 'ArticlesController');
这是我的控制器:
public function show(Article $article){
return view('articles.show',compact('article'));
}
public function edit(Article $article){
return view('articles.edit',compact(['article','tags']));
}
我想要这样做的原因是因为我希望show
操作仅显示已发布的文章,而edit
操作可以更改已发布和未发布的文章。
如果有更好的解决方案,请教我。谢谢!
答案 0 :(得分:0)
为什么不制作一个仅适用于“已发布”路线的中间件,在那里您将检查您的文章是否已发布?
答案 1 :(得分:0)
根据您的路线,我假设您有以下路径:
因此,您可以使用模式绑定文章:
公共功能启动(路由器$路由器) { 父::引导($路由器);
// bind
$router->bind('article', function($id){
return Article::published()->findOrFail($id);
});
// id pattern
$router->pattern('id', '[0-9]+');
}
现在,只需声明相应的路线:
Route::get('articles', 'ArticlesController@showAll');
Route::get('{id}', 'ArticlesController@edit');
最后,您的控制器可能如下所示:
class ArticlesController{
public funcion showAll(){
// show a list of articles
}
public function edit(Article $article){
// selected article
}
}
尝试使用类注入和保持清洁代码来充分利用Laravel。