2016-06-14 9 views
1

Ich versuche, einige Daten mit einer Aktion href an meinen Controller zu übergeben. Ich weiß nicht, warum, aber Laravel übergibt die Daten mit Methode GET, aber statt GET Ich brauche eine POST. Ich verstehe nicht wirklich, warum Laravel das macht und keine Antwort finden kann. Ich habe das mehrfach gemacht und meine Syntax scheint korrekt zu sein. Kann jemand einen Blick darauf werfen?Laravel href mit POST

Blade:

<td> 
@foreach($products as $product) 
     <a href="{{ action('[email protected]', $product->id) }}"> 
     <span class="glyphicon glyphicon-trash"></span></a> 
       {{ $product->name }}, 
@endforeach 
</td> 

Meine Route:

Route::post('delete', ['as' => 'delete', 'uses' => '[email protected]']); 

In meinem Controller ist nur:

public function delete() 
{ 
    return 'hello'; // just testing if it works 
} 

Fehler:

MethodNotAllowedHttpException in RouteCollection.php line 219.... 

Ich weiß, es ist ein get-Methode, verursachen, wenn ich versuche, die Daten an mein Controller zu übergeben, sieht meine URL wie folgt aus:

blabla.../products/delete?10 

Ist etwas falsch mit meiner Syntax? Ich kann nicht wirklich sehen, warum es die Methode get verwendet. Ich habe auch versucht, eine: data-method="post" Insite meiner <a> Tag, aber das hat auch nicht funktioniert.

Danke, dass Sie sich Zeit nehmen.

Antwort

6

Wenn Sie eine Verknüpfung mit einem Anker wie <a href=example.com> Ihre Methode machen immer GET sein. Das ist wie beim Öffnen einer URL in Ihrem Browser, Sie machen eine GET-Anfrage.

sollten Sie ein Formular verwenden, um diese POST-Anforderung an die Löschmethode des Controllers zu machen. Vorausgesetzt, dass Sie die Illuminate HTML-Paket für HTML und Formen haben, können Sie dies tun:

{!! Form::open(['method' => 'DELETE', 'route' => $route]) !!} 
{!! Form::submit('delete', ['onclick' => 'return confirm("Are you sure?");']) !!} 
{!! Form::close() !!} 

EDIT: Mit einem Knopf tag:

{!! Form::open(['method' => 'DELETE', 'route' => $route]) !!} 
<button type="submit"><i class="glyphicon glyphicon-remove"></i>Delete</button> 
{!! Form::close() !!} 
+0

in Ordnung, das funktioniert. Aber wie kann ich das mit dieser Glyphicon-Trash-Klasse machen? Ich will nicht eine Übermittlungsschaltfläche da drüben – WellNo

+0

@WellNo Sie könnten ein Button-Tag anstelle von submit verwenden. – TheFallen

+0

Ich strebte es mit einem Button-Tag, aber das hat nicht gut funktioniert. Vielleicht ist es meine Syntax. Könntest du mir ein Beispiel geben? – WellNo

1

Hier ist Ihr Problem:

<a href="{{ action('[email protected]', $product->id) }}"> 

Anchor-Tags werden immer über GET gesendet. Es ist ein HTTP eingebaut und ist nicht Laravel-spezifisch.

POST verwendet, wenn ein Formular übermittelt wird, dass das HTTP POST Verb oder die HTTP-Methode spezifiziert durch eine AJAX Anforderung aufgerufen wird, die POST als HTTP-Verb angibt.

Statt eine submit Typ Schaltfläche in einem Formular prüfen, das trägt, was Sie brauchen.

<td> 
     @foreach($products as $product) 
      <form method="POST" action="{{ route('delete') }}"> 
       <input type="hidden" name="product_id" value="{{ $product->id }}"> 
       {!! csrf_field() !!} 
       <button type="submit" class="btn"> 
        <span class="glyphicon glyphicon-trash"></span> 
       </button> 
      </form> 
      {{ $product->name }}, 
     @endforeach 
    </td> 

Und dann in Ihrem Controller:

public function delete() 
    { 
     // 'Die Dump' all of the input from the form/request 
     dd(request()->input()->all()); 

     // 'Die Dump' the specific input from the form 
     dd(request()->input('product_id')); 
    } 

Sie werden beginnen, zu sehen, wie GET und POST-Anforderungen unterscheiden sich von Schlüssel/Wert-Paare in Senden.

Für weitere Informationen:

http://www.tutorialspoint.com/http/http_methods.htm

+0

das würde funktionieren, aber ich werde die obige Lösung nehmen – WellNo