#php #laravel
#php #ларавель
Вопрос:
У меня есть некоторые проблемы с получением некоторой информации из базы данных в Laravel. Я пытаюсь использовать метод where и указать идентификатор, который мне нужен, но у меня всегда есть ошибка типа
SymfonyComponentHttpKernelExceptionMethodNotAllowedHttpException: The GET method is not supported for this route. Supported methods: POST.
Вот этот код
Контроллер
public function select_category($category_id){
$products = Products::where('category_id', $category_id)->get();
return $products;
}
API
Route::get('products/{category_id}', 'ProductsController@select_category');
Когда я удаляю $category_id
и где, только have like Products::all();
работает нормально, но нужно указать, где искать.
Ссылка на то, как я указываю $category_id, является http://localhost:8000/api/products/?category_id=16
Комментарии:
1. Можете ли вы разместить здесь другие маршруты, которые начинаются с «продукты»?
2. Я думаю, что ваша ссылка — это проблема. Попробуйте
http://localhost:8000/api/products/16
или, если вы хотите указать, что это продукт конкретной категории, затем создайте маршрут типаRoute::get('products/categories/{category_id}', 'ProductsController@select_category');
и вызовите его с помощьюhttp://localhost:8000/api/products/categories/16
Ответ №1:
Убедитесь, что в вашем файле routes под определением этого маршрута у вас нет аналогичной конечной точки, установленной для метода post. Итак, у вас, скорее всего, есть:
Route::post('products/something', 'ProductsController@store');
это переопределит ранее определенный метод.
Чтобы предотвратить это, вы можете изменить свой текущий маршрут на этот:
Route::get('products/{category_id}', 'ProductsController@select_category')->where('category_id', '[0-9] ');
Комментарии:
1. Я согласен с вами
Ответ №2:
измените свой URL:
http://localhost:8000/api/products/16
также изменение в файле представления:
<a href="{{ URL::to('products/'. $yourchategoryid ) }}">product</a>
Ответ №3:
В журнале указано, что произошла ошибка маршрута, она не имеет ничего общего с вашей красноречивой моделью
Проверьте, есть ли у вас другой маршрут, конфликтующий с этим
Редактировать : после просмотра вашего URL-адреса вы должны использовать «http://localhost:8000/api/products/16 » вместо того , чтобы «http://localhost:8000/api/products/?category_id=16 »
Второй пытается получить доступ к вашему почтовому маршруту «Route::post(‘products’ …», потому что для Laravel все, что после «?», является параметром и не используется при определении маршрута
Комментарии:
1. Это все маршруты, которые у меня есть Route::get(‘products/{id}’, ‘ProductsController@show’); Route::post(‘products’, ‘ProductsController@store’); Route::put(‘products/{id}’, ‘ProductsController@update’); Маршрут::удалить(‘products/{id}’, ‘ProductsController@delete’);
Ответ №4:
Я думаю, что так и должно быть
public function select_category(Request $request, $category_id){
$products = Products::where('category_id', $category_id)->get();
return $products;
}
если URL-адрес
http://localhost:8000/api/products/16
и если URL-адрес
http://localhost:8000/api/products/?category_id=16
функция должна быть
public function select_category(Request $request){
$products = Products::where('category_id', $request->input('category_id'))->get();
return $products;
}
первым параметром функции должен быть Request
экземпляр класса