У меня есть проект Laravel с набором результатов, представляющим ряд статей. Я пытаюсь отфильтровать результаты, установленные автором, с помощью раскрывающегося списка авторов справа.
Я пытаюсь отправить форму при изменении автора в списке, и имя автора отображается в URL-адрес как один из параметров поиска, например http://127.0.0.1: 8000 / article /? author = Bob , но я не уверен, как это сделать в Laravel.
I также есть второй фильтр для типов (ниже первого), и было бы неплохо иметь связанный URL-запрос, когда выбраны оба фильтра - например: http://127.0.0.1: 8000 / article /? author = Bob & type = review .
Как я могу отправить параметр GET в URL-адрес при случайном событии и отправить форму через запрос GET?
Мой код на данный момент: index. blade. php - показывает раскрывающийся список авторов
<div class="right-panel">
<?php $_GET['author-checkbox'] = ""; ?>
<form action="{{ route('articles.filter', $_GET['author-checkbox']) }}", method="get">
@csrf
<label for="author-checkbox" class="author selectbox">Filter titles by Author: </label>
<select name="author-checkbox" onchange="this.form.submit()" id="author selectbox" class="author selectbox">
@if(!empty($articles) && count($articles) > 0)
<option value="">--Please select an author--</option>
@foreach($articles['data'] as $article)
@if(isset($article['authors'][0]))
@foreach($article['authors'] as $author)
<option value="{{ $author['id'] }}">{{ $author['name'] }}</option>
@endforeach
@endif
@endforeach
@endif
</select>
</form>
</div>
// web. php - маршруты:
Route::get('/articles/filter/?author={author}', ['as' => 'articles.filter', 'uses' => 'ArticleController@filter']);
// ArticleController. php
public function filter(){
if(isset($_GET('author-checkbox'))){ // filter titles by author
$articlesJson = file_get_contents('https://content-store.explore.bfi.digital/api/articles');
$typesJson = file_get_contents('https://content-store.explore.bfi.digital/api/types'); // Get list of available types.
$objs = json_decode($articlesJson, true);
$types = json_decode($typesJson, true);
$filteredArticles = array();
foreach($objs['data'] as $article){
if(isset($article['authors'][0])){
if($article['authors'][0]['id'] == $_GET('author-checkbox')){
$filteredArticles[] = $article;
}
}
}
$fullArticles = $objs;
return view('articles.index')->with(['authorId' => $_GET('author-checkbox'), 'filteredArticles' => $filteredArticles, 'types' => $types, 'fullArticles' => $fullArticles]);
} else if(isset($request->{'category-checkbox'})){
$typeName = strtolower($request->{'category-checkbox'});
$articlesJson = file_get_contents('https://content-store.explore.bfi.digital/api/articles?type=' . $typeName);
$typesJson = file_get_contents('https://content-store.explore.bfi.digital/api/types'); // Get list of available types.
$types = json_decode($typesJson, true);
$objs = json_decode($articlesJson, true);
$filteredArticles = array();
foreach($objs['data'] as $article){
if(isset($article['type']['name'])){
if($article['type']['name'] == $request->{'category-checkbox'}){
$filteredArticles[] = $article;
}
}
}
$fullArticles = $objs;
return view('articles.index')->with(['typeName' => $request->{'category-checkbox'}, 'authorId' => "", 'filteredArticles' => $filteredArticles, 'fullArticles' => $fullArticles, 'types' => $types]);
}
If anyone has any idea, that would be great.
Thanks,
Rob