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

Laravel 5: jQuery Typeahead gives error status 500 on page load (Missing argument)

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

但是当我第一次加载 post/create 页面时,我在这条路线 http://localhost/reddit/public/data/subreddits

上得到 STATUS 500

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

路线

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);
}

Javascript 在 create.blade.php

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

错误

Missing argument 1 for App\Http\Controller\PostsController::getSubreddits()

你的第一条路线没有参数,但你调用了一个需要参数的函数。如果您删除该行,错误应该被删除。

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

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

正如@mimo 回答的那样,您需要将 query 设为可选参数。

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

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

中的 query 参数
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());
}