web-dev-qa-db-fra.com

Erreur 405 (méthode non autorisée) Laravel 5

J'essaie de faire une demande POST avec jQuery mais je reçois une erreur 405 (méthode non autorisée), je travaille avec Laravel 5

C’est mon code:

jQuery

<script type="text/javascript">
    $(document).ready(function () {
        $('.delete').click(function (e){
            e.preventDefault();
            var row = $(this).parents('tr');
            var id = row.data('id');
            var form = $('#formDelete');
            var url = form.attr('action').replace(':USER_ID', id);
            var data = form.serialize();
            $.post(url, data, function (result){
                alert(result);
            });
        });
    });
    </script>

HTML

{!! Form::open(['route' => ['companiesDelete', ':USER_ID'], 'method' =>'DELETE', 'id' => 'formDelete']) !!}

    {!!Form::close() !!}

Manette

public function delete($id, \Request $request){
        return $id;
    }

L'erreur Jquery est http: //localhost/laravel5.1/public/empresas/iminar/5 405 (méthode non autorisée).

La valeur de l'URL est 

http://localhost/laravel5.1/public/empresas/eliminar/5

et la valeur de données est 

_method=DELETE&_token=pCETpf1jDT1rY615o62W0UK7hs3UnTNm1t0vmIRZ.

Si je passe à la demande $.get cela fonctionne bien, mais je veux faire une demande de publication.

Quelqu'un pourrait m'aider?

Merci.

MODIFIER!!

Route

Route::post('empresas/eliminar/{id}', ['as' => 'companiesDelete', 'uses' => 'CompaniesController@delete']);
27
German Ortiz

L'exception methodNotAllowed indique qu'il n'existe pas de route pour la méthode HTTP que vous demandez. 

Votre formulaire est configuré pour faire une demande DELETE, votre itinéraire doit donc utiliser Route::delete() pour le recevoir.

Route::delete('empresas/eliminar/{id}', [
        'as' => 'companiesDelete',
        'uses' => 'CompaniesController@delete'
]);
34
Jeemusu

Votre fichier routes.php doit être configuré correctement.

Je suppose que votre configuration actuelle est la suivante:

Route::post('/empresas/eliminar/{id}','CompanyController@companiesDelete');

ou quelque chose. Définissez plutôt un itinéraire pour la méthode de suppression.

Route::delete('/empresas/eliminar/{id}','CompanyController@companiesDelete');

Maintenant, si vous utilisez une ressource Route, le nom de route par défaut à utiliser pour la méthode 'DELETE' est .destroy. Définissez plutôt votre logique de suppression dans cette fonction.

6
davsp

Si vous utilisez les itinéraires resource , dans le corps HTML du formulaire, vous pouvez utiliser method_field helper comme ceci:

<form>
  {{ csrf_field() }}
  {{ method_field('PUT') }}
  <!-- ... -->
</form>

Il créera une entrée de formulaire masquée avec le type de méthode, qui est correctement interprété par Laravel 5.5+.

Depuis Laravel 5.6, vous pouvez utiliser les directives Blade suivantes dans les modèles:

<form>
  @method('put')
  @csrf
  <!-- ... -->
</form>

J'espère que cela pourrait aider quelqu'un à l'avenir.

0
mdy

Lorsque use method delete in form doit alors définir la route delete

Route::delete("empresas/eliminar/{id}", "CompaniesController@delete");
0
Mahbubul Alam