您好,我通过表单提交使用url参数在Laravel(5.7)中过滤了一组数据。
资源可以具有许多课程级别和许多主题,这是我用来根据所选复选框进行过滤的代码:
if($request->get('subjects') || $request->get('levels')) {
$subjects = $request->get('subjects');
$levels = $request->get('levels');
$resources = Resource::whereHas('subjects', function($query) use ($subjects) {
return $query->whereIn('id', (array)$subjects);
})
->orWhereHas('curriculumLevels', function($query) use ($levels) {
return $query->whereIn('id', (array)$levels);
})
->get();
}else {
$resources = Resource::all();
}
我的问题:
A)这是根据用户选择过滤数据的最佳方法吗?
B)表单生成的网址很丑陋,我该如何清理它,使它看起来像subject = 1,2,3&levels = 1,2,3?
/resources?subjects%5B%5D=6&subjects%5B%5D=7&levels%5B%5D=2&levels%5B%5D=4
C)提交表单后,不再选中复选框,如何使用url参数显示选中的复选框?
感谢任何帮助!
答案 0 :(得分:0)
A)使用范围,它更有可能是最佳选择
class CreateMyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['name']
widgets={'name':MyWidget(addon="Name",placeholder="MyModel Name")}
B)RFC 3986标准不在乎URL是否看起来不错,如果最终用户不应该对其进行修改,则也不应该这样做(这永远不会发生)。获取参数对SEO不友好
C)您必须进一步传递它,在POST请求之后您要做
attrs
withInput应该可以通过TextInput
方法进行访问