MethodNotAllowedHttpException - поставить и удалить - PullRequest
0 голосов
/ 13 октября 2018

Я хочу удалить элемент, но я получил это сообщение об ошибке:

 (1/1) MethodNotAllowedHttpException

in RouteCollection.php line 255
at RouteCollection->methodNotAllowed(array('PUT', 'DELETE'))

мои маршруты:

Route::group(['prefix' => '/Seller', 'middleware' => ['seller_access']], function ()  {

    Route::get('/','Seller\SellerController@index')->name('seller');

    Route::group(['prefix' => '/Products'], function ()  {
        Route::get('/', 'MarketingBundle\Seller\Product\ProductController@index')->name('marketing.seller.product.index');
        Route::delete('/{id}', 'MarketingBundle\Seller\Product\ProductController@delete')->name('marketing.seller.product.delete');
        Route::put('/{id}', 'MarketingBundle\Seller\Product\ProductController@update')->name('marketing.seller.product.update');
    });

мой URL:

Seller/Products/228

мойконтроллер:

class ProductController extends Controller
{

    public $resources = "marketing.seller.product";


    public function index(Request $request)
    {

        $products = \Auth::user()->sellerProduct()->paginate(10);
        return view($this->resources . '.index', [
            'products' => $products
        ]);
    }

    /**
     * @param $product_id
     * @return \Illuminate\Http\JsonResponse
     */
    public function delete($product_id)
    {
        dd("masoud");
        \Auth::user()->sellerProduct()->detach(['product_id' => $product_id]);
        return response()->json(['status' => true]);
    }

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Это из документации laravel:

Любые HTML-формы, указывающие на маршруты POST, PUT или DELETE, которые определены в файле веб-маршрутов, должны включать поле токена CSRF.В противном случае запрос будет отклонен.Вы можете прочитать больше о защите CSRF в документации CSRF:

MethodNotAllowedException, скорее всего, имеет отношение к токену csrf. Вы добавили это в свое представление при публикации в функцию удаления?Это означает, что ваш взгляд должен иметь что-то вроде этого:

<form>
   @csrf
   <button></button>
</form>
0 голосов
/ 13 октября 2018

Чтобы Laravel узнал, что вы отправляете патч или запрос на удаление, вам необходимо добавить поле формы в ваши формы.

<form method='POST' action='#'>
@csrf
{{ method_field('PATCH') }} 
</form>

Документация https://laravel.com/docs/5.7/helpers#method-method-field https://laravel.com/docs/5.0/routing#method-spoofing

0 голосов
/ 13 октября 2018

измените порядок маршрутов следующим образом.

Route::delete('/{id}', 'MarketingBundle\Seller\Product\ProductController@delete')->name('marketing.seller.product.delete');
Route::put('/{id}', 'MarketingBundle\Seller\Product\ProductController@update')->name('marketing.seller.product.update');
Route::get('/', 'MarketingBundle\Seller\Product\ProductController@index')->name('marketing.seller.product.index');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...