我有一个带有typeahead的搜索引擎。我想要的是,在进行搜索并提交提交后,显示结果。这给出了两个问题:第一个是返回一个空数组,第二个是它不允许我访问属性告诉我它不是一个对象。
在控制器中,我使用了collect()来允许我访问属性,但它不起作用,而且也在哪里。
public function store(Request $request)
{
$url = 'storage/json/es/noticia.json';
$datos = file_get_contents($url);
$data = json_decode($datos, true);
$data = collect($data)->where("title","LIKE","%{$request->texto}%")->all();
return view('web.buscar.index', compact('data'));
}
如果我使用$data = collect($data)->all();
,我可以看到该集合:
array:8 [▼
0 => []
1 => array:4 [▼
"id" => 2
"title" => "There is a title"
"lead" => "There is a lead"
"slug" => "there-is-a-title"
]
2 => array:4 [▶]
3 => array:4 [▶]
4 => array:4 [▶]
5 => array:4 [▶]
6 => array:4 [▶]
7 => array:4 [▶]
]
然后,如果我在视图中尝试:$value->title
,则会出现错误:尝试获取非对象的属性“标题”。在视图中,我有:
{!! Form::open([
'route' => 'buscar',
'id' => 'buscar',
'name' => 'buscar',
'class' => 'buscador col-xs-12',
'method' => 'POST',
'accept-charset' => 'utf-8'
]) !!}
<input id="texto" name="texto" class="input_buscador typetitulo" autocomplete="off" type="text"/>
{!! HTML::image('images/web/icons/lupa.svg', '', array('height' => '30', 'class' => 'boton_buscador', 'onclick' => 'document.buscar.submit()') ) !!}
{!! Form::close() !!}
@if(isset($data))
@foreach($data as $value)
<span>{{$value->title}}</span><br>
@endforeach
@endif
如果我在控制器中使用$data = collect($data)->pluck('title');
而在视图中我没有调用属性'title'
,这可行,但这不是我想要的,因为我也需要访问其他属性。
任何的想法?提前谢谢!
答案 0 :(得分:1)
这是失败的,因为数组中的第一个数组没有任何值,因此您将获得未定义的索引,通过执行
删除任何空数组 public function store(Request $request)
{
$url = 'storage/json/es/noticia.json';
$datos = file_get_contents($url);
$data = json_decode($datos, true);
$data = array_filter($data);
$data = collect($data)->where("title","LIKE","%{$request->texto}%")->all();
return view('web.buscar.index', compact('data'));
}
或者你可以测试一下你的foreach是否存在
@foreach($data as $value)
<span>{{$value->title ?? ''}}</span><br>
@endforeach
然后,您可以使用过滤器
搜索集合 collect($data)->filter(function ($item) use ($request) {
return $item->title == $request->texto;
)
您可以使用stristr等编辑返回更精细