2016-06-14 67 views
1

我想通過動作href將一些數據傳遞給我的控制器。我不知道爲什麼,但laravel與傳遞數據獲取方法,但不是GET我需要一個POST。我不明白爲什麼拉拉維爾這樣做,並沒有找到答案。我多次這樣做,我的語法似乎是正確的。有人可以看看它嗎?Laravel href與POST

刀片:

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

我的路線:

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

在我的控制器僅僅是一個:

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

錯誤:

MethodNotAllowedHttpException in RouteCollection.php line 219.... 

我知道這是一個get方法,因爲如果我試圖將數據傳遞給我的控制器,我的URL看起來像這樣:

blabla.../products/delete?10 

有什麼不對我的語法?我真的不明白爲什麼它使用get方法。 我也嘗試過:data-method="post"因爲我的<a>標籤,但這也沒有奏效。

感謝您抽出時間。

回答

6

當您使用類似<a href=example.com>這樣的錨鏈接時,您的方法將始終爲GET。這就像在瀏覽器中打開一個URL,您發出GET請求。

您應該使用表單將該POST請求發送到控制器的刪除方法。假設你有照亮HTML包HTML和形式,你可以這樣做:

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

編輯: 一個按鈕標籤:

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

還好,這個工程。但是我怎麼能用這個glyphicon-trash類來做到這一點?我不想在那裏提交按鈕 – WellNo

+0

@WellNo您可以使用按鈕標記而不是提交。 – TheFallen

+0

我用按鈕標記拍了一下,但是這個效果不好。也許這是我的語法。你能舉個例子嗎? – WellNo

1

這是你的問題:

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

錨標籤總是通過GET提交。它是內置的HTTP,並不是Laravel特有的。

當提交指定POST HTTP動詞的表單時,或者由指定POST作爲HTTP動詞的AJAX請求調用HTTP方法時,會使用POST。

請改爲以提交所需內容的表單考慮一個submit類型按鈕。

<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> 

然後在你的控制器:

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')); 
    } 

你將開始看到如何GET和POST請求的鍵/值對發送不同。

欲瞭解更多信息:

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

+0

這將工作,但我會採取上述解決方案 – WellNo