Возникли проблемы с выяснением, куда должно вести действие формы моей формы поиска - PullRequest
0 голосов
/ 04 ноября 2018

В настоящее время я пытаюсь реализовать функцию поиска, но на данный момент немного затруднен.

Я хочу, чтобы это работало так:

  • Пользователь вводит слово в форме поиска, расположенной на панели навигации.
  • Пользователь отправляется на URL с slug, который отображает все результаты на основе slug

Я уже понял логику того, как извлекать изображения, основываясь на слове слагов, однако я не понял, как передать слово слагов из строки поиска в функцию search (), которую я затем отправьте меня в окно поиска. Я не уверен, что мне нужен второй маршрут POST, который я могу использовать в действии формы HTML.

public function search($query){
    $images = Image::where('name', 'like', '%'.$query.'%')
    ->orWhereHas('tags', function($q) use ($query) {
        return $q->where('name', 'like', '%'.$query.'%');
    })->orWhereHas('category', function($q) use ($query) {
        return $q->where('name', 'like', '%'.$query.'%');
    })->latest()->get();

    return view('search', ['images' => $images]);
}

Это мой маршрут до сих пор:

Route::get('/search/{query}', 'PagesController@search')->name('searchView');

HTML-форма:

<form action="" method='POST'>
    <input type="text" placeholder="Search" name="search">
</form>

1 Ответ

0 голосов
/ 04 ноября 2018

Самый простой способ - использовать строку запроса. то есть:

Форма:

<form action="{{route('searchView')}}">
    <input type="text" placeholder="Search" name="search">
</form>

Маршрут:

Route::get('/search', 'PagesController@search')->name('searchView');

Метод:

public function search(Request $request)
{
    $query = $request->search;
    $images = Image::where('name', 'like', '%'.$query.'%')
    ->orWhereHas('tags', function($q) use ($query) {
        return $q->where('name', 'like', '%'.$query.'%');
    })->orWhereHas('category', function($q) use ($query) {
        return $q->where('name', 'like', '%'.$query.'%');
    })->latest()->get();

    return view('search', ['images' => $images]);
}

Маршрут будет выглядеть как

/search?search=queryhere

Но

если вы хотите, чтобы маршрут был чем-то вроде /search/query, вам нужно вызвать маршрут. Это не нормальное поведение HTML от. так что вам нужно будет сделать запрос, используя некоторый js-скрипт.

<form id="myForm" onsubmit="event.preventDefault(); search();">
    <input type="text" placeholder="Search" name="searchQuery" id="searchQuery">
</form>

<script type="text/javascript">
    function search() {
        var query = document.getElementById('searchQuery').value
        window.location.href='/search/'+query
    }
</script>

и оставьте свой маршрут и метод как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...