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

Php Larvel 5:jQuery Typeahead在页面加载时给出错误状态500(缺少参数),php,jquery,laravel,laravel-5,typeahead.js,Php,Jquery,Laravel,Laravel 5,Typeahead.js,其他一切都很好,当我搜索子Reddit(类别)并将其提交到数据库时,没有问题 但是当我第一次加载post/create页面时,我在这条路线上获得了STATUS 500http://localhost/reddit/public/data/subreddits public function getSubreddits($query = '') { $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%

其他一切都很好,当我搜索子Reddit(类别)并将其提交到数据库时,没有问题

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

public function getSubreddits($query = '') {
    $results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
    return Response::json($results);
}
考虑到它有效,我不确定我做错了什么

路线

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>

$(文档).ready(函数(){
var subreddits=新猎犬({
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer:猎犬,标记,空白,
预取:'http://localhost/reddit/public/data/subreddits',
远程:{
网址:'http://localhost/reddit/public/data/subreddits/%QUERY',
通配符:'%QUERY'
}
});
$('#remote.typeahead').typeahead(null{
姓名:'姓名',
显示:“名称”,
资料来源:subreddits
});
$('#remote.typeahead').bind('typeahead:select',函数(ev,suggestion){
$('.subreddit_id').val(suggestion.id);
});
});
错误

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


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

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

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

因为@mimo已经回答了您需要将您的
查询设置为可选参数

Route::get('data/subreddits/{query?}', 'PostsController@getSubreddits');
您还需要在
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());
}

错误消息是什么?它向我显示了一个新错误,即App\Http\Controllers\PostsController::getSubreddits()缺少参数1
删除该路由后,我仍然收到相同的错误。然后请发布你的route.php文件和你的
getSubreddits
函数。我在我的原始帖子中发布了该代码,请看一看。但是如果你只有
route::get('data/subreddits/{QUERY}','PostsController@getSubreddits');
它应该可以解决这个错误,因为没有像
data/subreddits那样的url。这不是同一个错误,它是
404页面未找到,因为我刚刚删除了它。太棒了,谢谢你了。它起作用了。我想我误解了@mimo-我仍然需要
$query
参数的默认值。我也删除了重复的路线。