【发布时间】:2019-06-04 07:37:49
【问题描述】:
所以我现在拥有的是一个正常的资源路径,包括索引、创建、存储、编辑、更新,通常。在索引中,我有一些过滤器选项可以过滤掉条目。很简单。我想要的是保存过滤器选项,并且当您创建、更新或删除它时,当您被重定向回索引时,您的过滤器选项仍然被保存和过滤。我遇到的问题是我不想进行不必要的重定向。过滤器是一种形式,每次它的值发生变化时它都会不断地发布到索引中。在那种情况下,我不希望它成为重定向。到目前为止,我已经尝试找出它是重定向还是只是一个已更改的过滤器。在这种情况下,我希望能够判断上一条路线是否与当前路线相同,即索引路线。但是,资源都以相同的路由名称开头。重定向 url 存储在 'cultivar_form_return_url' 变量下的会话中,然后放入一个变量中以用于检查是否需要重定向。
session(['cultivar_form_return_url' => $request->fullUrl()], '');
$redirect_url = $request->session()->get('cultivar_form_return_url', '');
if($redirect_url && !$has_filtered && !$filter) {
return redirect($redirect_url);
}
$cultivars = $query
->orderBy('name')
->paginate(20);
return view('database.cultivars.index',compact('cultivars','filter','redirect_url'));
$redirect_url 是提交过滤请求时创建的 url。当我从创建、更新或删除返回时,我使用此 url 重定向。 其中包含搜索的参数。我检查redirect_url是否存在,对于重定向的第二个参数,我创建了一个以false开头的变量,如果我的请求在每个函数中都有过滤器的参数,我将变量设置为true,如下所示。
if($request->has('input')) {
$has_filtered = true;
$query = $query->where('input', $request->input);
$filter['input'] = $request->input;
}
重定向检查的最后一个参数是过滤器变量,它包含我的过滤器选项,如果设置了特定的过滤器,它会在每个函数中设置。
$has_filtered = false;
$query = (new Cultivar);
$filter = [
'search' => null,
'crop' => null,
'is_rootstock' => null,
'is_public' => null,
];
我想区分重定向和仅更改过滤器选项。谢谢。任何帮助表示赞赏。
【问题讨论】:
标签: php laravel filtering state laravel-blade