【发布时间】:2016-07-26 02:02:50
【问题描述】:
在我的页面 events.index 上,我首先显示登录用户的事件列表。
在我的索引页面上,我有一个带有选项/选择的表单,让用户选择并显示另一个用户的事件。当他提交该表单时,我希望我的索引函数(控制器)使用 $user_id 值(来自表单)并再次显示 events.index 页面,但针对该选定用户的事件。
我不确定最好的方法是什么:
- 设置会话变量以保留 user_id 值?不知道如何使用表单来做到这一点。
- 使用 get 方法提交表单(并获得丑陋的 ?user_id=1 URL)
- 更改我的索引路由以接受 post 方法(尽管我已经采用了该 post/events 路由(通过 Route::post('events', 'EventsController@store'))
不确定什么是干净的方法:
我的事件/索引路线:
Route::get('events', [
'as' => 'event.index',
'uses' => 'EventsController@index'
]);
事件控制器
public function index()
{
// How to get the $user_id value from form?
if (empty($user_id))
{
$user_id = \Auth::user()->id;
}
$events = Event::where('events.user_id','=','$user_id');
$users = User::all();
return view('events.index')->with(['events' => $events])->with(['users' => $users]);
}
查看索引
{!! Form::open(['route' => 'events.index', 'method' => 'get']) !!}
<select id="user_id" name="user_id">
@foreach($users as $user)
<option value="{{$user->id}}">{{$user->name}}</option>
@endforeach
</select>
{!! Form::submit('Show events for this user') !!}
{!! Form::close() !!}
@foreach($events as $event)
...
@endforeach
【问题讨论】:
-
我会使用选项#2,因为在我看来这是最简洁的方式:用户#1 查看用户#2 的事件,因此用户#1 应该位于类似 ?user=2 的 URL 上
-
您可以只使用 javascript 进行过滤,除非您需要全局保存过滤器,例如,选择用户 A,然后其他页面也将按用户 A 过滤。在这种情况下,我会使用一个 ajax 帖子,用于保存用户过滤器值,并让您的所有查询都按此过滤器(如果已设置)。
-
@jakub_jo 不是说它不干净,而是它不会生成漂亮的 url。