Привет, мое приложение требует показа постов из нескольких категорий. когда пользователь проверяет флажок категории, страница публикаций обновляется и показывает сообщения, которые принадлежат к выбранной категории, а когда пользователь устанавливает флажок другой категории, страница обновляется и показывает сообщения, которые принадлежат к обеим выбранным категориям, в моем сценарии URL должен быть таким:
http://localhost: 8000 / posts? & Cat_Name = sport-economi c
Я получил URL и взорвался в массив с разделителем "-" и отлично работает, когда я добавляю Параметры cat_Name для URL вручную с "-". у меня вопрос, как это можно сделать автоматически, что означает, что когда я выбираю категории, автоматически добавляю имя выбранных категорий в параметр cat_Name с разделителем "-", как предыдущий URL? отношение между публикацией и категорией «многие ко многим»
Форма флажка в блейде:
<form action="{{ url('/posts-filter') }}" method="post">{{ csrf_field() }}
<h3>categories</h3>
<ul id="tree1">
@foreach($categories as $category)
@if(!empty($_GET['cat']))
<?php $categoryArr = explode('-',$_GET['cat']) ?>
@if(in_array($category,$categoryArr))
<?php $categorycheck="checked"; ?>
@else
<?php $categorycheck=""; ?>
@endif
@else
<?php $categorycheck=""; ?>
@endif
<li>
<input name="categoryFilter[]" onchange="javascript:this.form.submit();" id="{{ $category->id }}" value="{{ $category->name }}" type="checkbox" {{ $categorycheck }}> <span class="products-colors">{{ $category->name }}</span>
@if(count($category->childs) )
@include('news.cat',['childs' => $category->childs])
@endif
</li>
@endforeach
</ul>
</form>
Функция фильтра, которая выбирает запрос формы:
public function filter(Request $request){
$data = $request->all();
$cat_Name="";
if(!empty($data['categoryFilter'])){
foreach($data['categoryFilter'] as $cat){
if(empty($cat_Name)){
$cat_Name = "&cat_Name=".$cat;
}else{
$cat_Name .= "-".$cat;
}
}
}
$finalUrl = "posts"."?".$cat_Name;
return redirect::to($finalUrl);
}
Функция сообщений:
public function posts(Request $request){
$categories = Category::where([
['type', '=', 'post'],
['parent_id', '=', 0],
])->get();
if(!empty($request->input('cat_Name'))){
$categoryArray = explode('-', $request->input('cat_Name'));
$news = News::whereHas('categories', function($q) use ($categoryArray) {
return $q->whereIn('name', $categoryArray);
})->get();
}else{
$posts = Post::where('status', 'published')->paginate(5);
}
return view('post.index',compact('posts','categories'));
}
Моя проблема с кодом состоит в отображении одной категории каждый раз в URL, а не в добавление к прошлому URL-адресу cat_Name с разделителем "-"