弄清楚我的搜索表单的表单动作应该在什么地方出现问题

时间:2018-11-04 00:48:17

标签: php laravel

当前,我正在尝试实现搜索功能,但此刻遇到了一些障碍。

我希望它的工作方式是这样:

  • 用户在导航栏中的搜索表单中输入单词。
  • 用户被发送到带有slug的URL,该URL显示基于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 :(得分:1)

最简单的方法是使用查询字符串。即:

表格:

<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>

并保持您的路线和方法不变。