我正在开发一个图片库网络应用程序。它有很多访问路径,它们都应该以相同的方式渲染图库,唯一的区别是图片的顺序。
例如:
mysite.com/favorites -> shows all the pics ordered by number of favorites
mysite.com/views -> shows all the pics ordered by number of views
mysite.com/date -> shows all the pics ordered by date
mysite.com/votes -> shows all the pics ordered by votes
由于所有这些操作之间如此相似,在 Controller 上为每个路由定义一个操作并将顺序作为参数传递是一种好习惯吗?或者这个逻辑应该在模型中处理?
最佳答案
如果操作非常相似而与参数不同,那么有一个操作接受该参数可能是有意义的。最后一点不是规则,只是偏好。
根据您的具体情况,您可以使用带有参数的一条路由按如下方式处理:
Route::get('{orderBy}', 'GalleryController@showPics')
然后在你的 Controller 中你将看到如下内容:
class GalleryController extends BaseController
{
public function showPics($orderBy)
{
$pics = $this->service->getPics($orderBy);
return View::make('gallery')->with('pics', $pics);
}
}
虽然它可以正常工作,但有一些要点需要考虑:
- 使用具有专门操作的 Controller 更具语义,即:showFavorites、showMostViewed、showRecents、< em>showMostVoted。
- 想想景色。如果您计划提供不同的 View 、具有不同数据集的不同嵌套子级,最好针对每种情况采取一个操作。
- 代码可读性。想象一下 Controller 有几个 if 语句,几个 return 语句,所有这些都包装在一个大的 try-catch block 中,该 block 有多个 catch 子句...如果您可以避免下一个程序员用意大利面条代码而大脑失灵,请考虑它。
关于php - 处理具有类似操作的路线的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194051/