【发布时间】:2018-08-14 00:41:33
【问题描述】:
我的索引页面显示我的图像表中的所有图像,最新提交的图像位于顶部。我正在尝试添加一些基本过滤,以便我可以掌握这个概念,但我做错了。我的想法是:
添加 2 个带有 URL 的 <a> 元素到 www.domain.com 和 www.domain.com/ascending。如果用户访问www.domain.com,图片将按降序显示,如果用户访问www.domain.com/ascending,则图像将按升序显示。
然后我让我的主路由Route::get('/', 'PagesController@index')->name('home'); 有一个可选参数,例如Route::get('/{filter?}', 'PagesController@index')->name('home');
基于可选参数,我将向视图发送不同的$images 变量:
public function index($filter){
switch($filter) {
case 'ascending' : $images = Image::orderBy('created_at', 'asc')->get();break;
default : $images = Image::orderBy('created_at', 'desc')->get();
}
return view('home', ['images' => $images]);
}
当我这样做时,到目前为止我遇到了 2 个问题:
首先,当我转到www.domain.com 时,我得到"Type error: Too few arguments to function App\Http\Controllers\PagesController::index(), 0 passed and exactly 1 expected"
其次,在将可选参数添加到路由Route::get('/{filter?}', 'PagesController@index')->name('home'); 之后,即使我要去http://example.com/admin 或http://example.com/albums 之类的URL,我也会发送到我的索引页面。
我相信会发生这种情况,因为我的代码假定 /admin 和 /albums 是我的 http://example.com 网址中的可选参数,而不是应有的单独网址。
Route::get('/{filter?}', 'PagesController@index')->name('home');
Route::get('/image/{id}', 'PagesController@specificImage')->name('specificImage');
Route::get('/tags', 'PagesController@tags')->name('tags');
所以即使我去标签路由,也会显示索引视图而不是标签视图。
如果有人能告诉我如何实现这个基本过滤,我将不胜感激。
【问题讨论】: