我有一个包含三个字段的搜索表单:部门,角色和位置,我打电话给联系人搜索,它将在多个页面上。
这是一张图片:
在这个程度上,我把它作为Blade包含,所以我可以在任何需要的地方重复使用它。
我可以在Users表中使用这些字段的所有值,因为我可以执行以下操作:
SELECT DISTINCT department, role, location FROM users
这将为我提供所有独特的角色,部门和地点。
但是,为了通过数据库填充此表单,我每次都必须将数据传递给父视图吗?
例如,我在想这样的事情。
在控制器中
$formFields = User::distinct()->get(['department', 'role', 'location']);
在视图中
@foreach(formFields as $field)
$field->department
...
...
@endforeach
唯一的问题是,我必须将此数据发送到使用该表单的每个视图吗?
或者,我只是制作一个使用User模型的SearchController来输入它吗?
是否可以通过这种方式将数据提供给部分视图?
更新
查看作曲家似乎是要走的路,但我觉得这不合适:
view()->composer('layouts.quick-search', function($view) {
$view->with('departments', \App\User::distinct()->get(['department']),
'locations', \App\User::distinct()->get(['location']),
'roles', \App\User::distinct()->get(['role']));
});
因为它似乎不喜欢多个变量。
我也尝试了以下内容:
<select class="form-control transparant" id="department" name="department">
@foreach($departments as $department)
<option value="{{ $department }}">{{ $department }}</option>
@endforeach
</select>
但这填补了选择框:
{"department":"Digital","profile":null}
这显然是一个数组,但是这是否意味着我必须对JSON进行解码?
答案 0 :(得分:0)
正如我在评论中提到的,你可以这样做:
在视图中
@php $formFields = \App\User::distinct()->get(['department', 'role', 'location']); @endphp
@foreach(formFields as $field)
$field->department
...
...
@endforeach
另一种方法是创建一组使用局部视图的所有视图。将中间件应用于您将数据分配给请求的组或使用View::share()
答案 1 :(得分:0)
View composers非常适合这一点。
您为表单创建了一个单独的视图,例如search
,并将其放在服务提供者中:
use Illuminate\Support\Facades\View;
use App\User;
// ...
publlic function boot()
{
View::composer('search', function ($view) {
$view->with([
'formFields' => User::distinct()->get(['department', 'role', 'location']);
]);
});
}
现在每次使用search
视图时,都会执行此查询并将结果传递给视图。