处理具有类似操作的路线的最佳做法是什么?

时间:2013-08-12 18:27:42

标签: php laravel

我正在使用图片库Web应用程序。它有很多访问路线,它们都应该以相同的方式呈现图库,唯一的区别是图片的顺序。

所以例如:

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

由于它们之间的所有这些操作非常相似,在控制器上为每个路径定义一个操作并将顺序作为参数传递是一个好习惯吗?或者这个逻辑应该在模型中处理?

1 个答案:

答案 0 :(得分:2)

如果操作非常相似且与参数不同,则可以使一个操作接受该参数。最后一次不是一个规则,只是一种偏好。

在您的特定情况下,您可以通过使用带参数的一个路径来处理它:

Route::get('{orderBy}', 'GalleryController@showPics')

然后在您的控制器中,您将获得如下内容:

class GalleryController extends BaseController
{
    public function showPics($orderBy)
    {
        $pics = $this->service->getPics($orderBy);
        return View::make('gallery')->with('pics', $pics);
    }
}

虽然它可以正常工作,但还有一些要考虑的问题:

  1. 具有专门操作的控制器更加语义,即: showFavorites showMostViewed showRecents ,< EM> showMostVoted
  2. 考虑视图。如果您计划提供不同的视图,具有不同数据集的不同嵌套子级,则最好对每个案例执行操作。
  3. 代码可读性。想象一下控制器有几个if语句,几个返回语句,都包含在一个有多个catch子句的大型try-catch块中......如果你能用一个意大利面条代码避免大脑失去下一个程序员,那就考虑一下吧。 LI>