Laravel:如何从主页面搜索栏中搜索项目

时间:2014-02-11 19:59:10

标签: php laravel laravel-4

我的母版页上有一个搜索栏。所有其他页面都在扩展此页面。 我在母版页上有一个搜索文本字段,其定义为

{{Form::open(array('action'=>'TopicsController@searchquery', 'method'=>'GET'))}}      
    {{Form::input('search', 'q', null, ['placeholder'=>'Search', 'class' => 'search'])}}
{{Form::close()}}

Routes.php条目如下:

Route::get('/searchquery/{q}', [
    'uses'=> 'TopicsController@searchquery',
    'as' => 'topic.searchquery']);

并且Controller操作看起来像这样

    public function searchquery($q)
{

    if($search = Request::get('q')){

        $topics = Topic::search($search);
    }
    else {
        $topics = Topic::all();
    }

    $categories = Category::all();
    $tags = $this->topicRepo->allTags();
    return View::make('topics.topicSearch')->withCategories($categories)->withTopics($topics)->with('term', $q)->withTags($tags);

}

但是,当我执行搜索时,控制器的searchquery中的搜索查询没有获得正确的参数 我的网址如下所示:http://localhost:8000/searchquery/%7Bq%7D?q=test

请帮助。

感谢

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是从路径定义中删除/{q},现在它应该可以正常工作。但我想你希望它有漂亮的方式,/q/term,而不是像?q=term。好吧,你没有得到正常的HTML表单提交,但有一点JS你可以这样做:

// jQuery, but it can be done without it
$('form').submit(function() {
  document.location.href = '/searchquery/' + $(this).find('input').val();
  return false;
 });

如果您选择了最后一个解决方案,您可以考虑不在JS代码中对路由进行硬编码,而是可以在表单上的数据属性(例如data-submit-url)中设置路由。