Reputation: 4526
Everything else works fine, when I search for a subreddit (category) and submit it to the database, no problem there.
But when I first load the post/create
page, I get STATUS 500
on this route http://localhost/reddit/public/data/subreddits
I'm not sure what I've done wrong considering that it works.
routes
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 in 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>
Error
Missing argument 1 for App\Http\Controller\PostsController::getSubreddits()
Upvotes: 2
Views: 544
Reputation: 5124
As @mimo has answered you need to make your query
a optional parameter.
Route::get('data/subreddits/{query?}', 'PostsController@getSubreddits');
Also you need to pass a default value to your query
parameter in getSubreddits
public function getSubreddits($query = '') {
$results = Subreddit::select('id', 'name')->where('name', 'LIKE', '%' . $query . '%')->get();
return Response::json($results);
}
Also if there are only few results you can sent all the data if no query parameter is passed.
public function getSubreddits($query = '') {
$q = Subreddit::select('id', 'name')
if ($query) {
$q->where('name', 'LIKE', '%' . $query . '%');
}
return Response::json($q->get());
}
Upvotes: 1
Reputation: 13562
Your first route has no parameter but you call a function that needs one. If you delete the row the error should be removed.
Route::get('data/subreddits/{QUERY?}', 'PostsController@getSubreddits');
Will call the function even when there is no query.
Upvotes: 0