Laravel - создание фильтра для набора результатов с использованием $ _GET и параметров запроса в URL-адресе? - PullRequest
1 голос
/ 13 июля 2020

У меня есть проект 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: &nbsp;</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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...