Laravel 5: jQuery Typeahead дает статус ошибки 500 при загрузке страницы (отсутствует аргумент)

Все остальное работает нормально, когда я ищу 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);
}

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>

ошибка

Отсутствует аргумент 1 для App \ Http \ Controller \ PostsController :: getSubreddits ()

2

Решение

Поскольку @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

Другие решения

Ваш первый маршрут не имеет параметров, но вы вызываете функцию, которая нуждается в ней. Если вы удалите строку, ошибка должна быть удалена.

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

Будет вызывать функцию, даже если нет запроса.

0

По вопросам рекламы [email protected]