Неподдерживаемый метод получения в Laravel

#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 экземпляр класса