Laravel 5:jQuery Typeahead在页面加载时给出错误状态500(缺少参数)

时间:2015-10-04 21:28:41

标签: php jquery laravel laravel-5 typeahead.js

其他一切正常,当我搜索subreddit(类别)并将其提交到数据库时,没问题。

但是,当我第一次加载post/create页面时,我会在此路线STATUS 500上获得http://localhost/reddit/public/data/subreddits

考虑到它有效,我不确定我做错了什么。

路由

Route::get('data/subreddits', 'PostsController@getSubreddits');
Route::get('data/subreddits/{QUERY}', 'PostsController@getSubreddits');

PostsController.php

public function create()
{
    $subreddits = Subreddit::lists('name', 'id')->toArray();

    return view('post/create')->with('subreddits', $subreddits);
}

public function getSubreddits($query) {
        $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
        return Response::json($results);
}

create.blade.php

中的Javascript
<script type="text/javascript">
        $(document).ready(function() {
            var subreddits = new Bloodhound({
                datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
                queryTokenizer: Bloodhound.tokenizers.whitespace,
                prefetch: 'http://localhost/reddit/public/data/subreddits',
                remote: {
                    url: 'http://localhost/reddit/public/data/subreddits/%QUERY',
                    wildcard: '%QUERY'
                }
            });

            $('#remote .typeahead').typeahead(null, {
                name: 'name',
                display: 'name',
                source: subreddits
            });

            $('#remote .typeahead').bind('typeahead:select', function(ev, suggestion) {
                $('.subreddit_id').val(suggestion.id);
            });
        });
    </script>

错误

  

App \ Http \ Controller \ PostsController :: getSubreddits()缺少参数1

2 个答案:

答案 0 :(得分:1)

正如@mimo已经回答,您需要将query作为可选参数。

Route::get('data/subreddits/{query?}', 'PostsController@getSubreddits');

您还需要将默认值传递给query

中的getSubreddits参数
public function getSubreddits($query = '') {
    $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
    return Response::json($results);
}

此外,如果只有很少的结果,如果没有传递任何查询参数,您可以发送所有数据。

public function getSubreddits($query = '') {
    $q = Subreddit::select('id', 'name')
    if ($query) {
        $q->where('name', 'LIKE', '%' . $query . '%');
    }
    return Response::json($q->get());
}

答案 1 :(得分:0)

您的第一个路线没有参数,但您调用的功能需要一个。如果删除该行,则应删除该错误。

Route::get('data/subreddits/{QUERY?}', 'PostsController@getSubreddits');

即使没有查询,也会调用该函数。