我的索引/着陆/主页显示了我的图像表中的所有图像,最新的提交位于顶部。我正在考虑通过以下方式添加过滤器:
使用<a>
和www.domain.com/hot
之类的URL添加www.domain.com/trending
元素。
使我的家庭路线Route::get('/', 'PagesController@index')->name('home');
具有一个可选参数,例如Route::get('/{filter?}', 'PagesController@index')->name('home');
基于可选参数,我将向视图发送不同的$ images变量:
public function index($filter){
if ($filter == 'hot') {
$images = hot images;
} else if ($filter == 'trending') {
$images = get trending images;
} else {
$images = Image::orderBy('created_at', 'desc')->get();
}
return view('home', ['images' => $images]);
}
我还没有使用真实的代码来获取热门图像和趋势图像,因为我还没有弄清楚如何确定图像是热门图像还是趋势图像,但是您明白了。
这是创建过滤的正确方法吗?有更好的方法吗?
答案 0 :(得分:2)
您可能希望使用switch语句使事情保持整洁。
switch($filter) {
case 'hot' : $images = hot images;break;
case 'trending': $images = get trending images;break;
default : $images = Image::orderBy('created_at', 'desc')->get();
}
如果希望使其更易于管理,则可以选择一个数组,支持代码使用$object->{variable with string}()
方法动态地访问该函数,以搜索要调用的正确方法。
将新项目添加到数组时,仅需提供提供方法和数组条目'newest' => 'getNewestImages',
。
private $image_getters = [
'hot' => 'getHotImages',
'trending' => 'getTrendingImages',
];
public function index($filter)
{
$images = $this->getImages();
return view('home', ['images' => $images]);
}
protected function getImages($filter)
{
if(array_key_exists($filter, $this->image_getters)) {
$getter = $this->image_getters[$filter];
$images = $this->{$getter}();
}
else {
$images = Image::orderBy('created_at', 'desc')->get();
}
return $images;
}