2016-09-30 88 views
3

我试图删除下面的代码的文章已有文章:Laravel 5删除与销毁方法

ArticlesController:

public function destroy($id) { 
    $article = Article::findOrFail($id); 
    $article->delete(); 

    return redirect('backend/dashboard')->with([ 
    'flash_message' => 'Deleted', 
    'flash_message_important' => false 
    ]); 
} 

查看:

@foreach($articles as $key => $article) 
    <tr> 
    <td class="td-actions text-right"> 
     <a href="{{action('[email protected]',$article->id)}}"type="button" rel="tooltip" title="" class="btn btn-info btn-simple btn-xs" data-original-title="Edit Article"> 
     <i class="fa fa-edit"></i> 
     </a> 
     <a href="{{action('[email protected]',$article->id)}}" type="button" rel="tooltip" title="" class="btn btn-danger btn-simple btn-xs" data-original-title="Delete Article"> 
     <i class="fa fa-times"></i> 
     </a> 
    </td> 
    </tr> 
@endforech 

通过点击“删除文章“按钮我被重定向到一个完全不同的观点。看起来像@show方法被执行。

我的路线:

Route::get('backend/articles/archive', '[email protected]'); 
Route::resource('backend/articles', 'ArticlesController'); 
Route::get('backend/dashboard', [ 
    'middleware' => 'auth', 
    'uses' => '[email protected]' 
]); 

我该如何解决这个问题?

+0

如果你离开改变重定向,像redirect()一样会发生什么? – Neat

+0

你可以添加你的相关路线的问题?带重定向()的 –

+0

没有任何变化。相同的结果 – Mamulasa

回答

3

原因是因为您正在使用a标记。 使用表格标签与方法等于删除这将解决您的问题。

  @foreach($articles as $key => $article) 
      <tr> 
      <td class="td-actions text-right"> 
       <a href="{{action('[email protected]',$article->id)}}"type="button" rel="tooltip" title="" class="btn btn-info btn-simple btn-xs" data-original-title="Edit Article"> 
        <i class="fa fa-edit"></i> 
       </a> 

       Form::open([ 'method' => 'delete', 'route' => [ 'items.destroy', $item->id ] ]) 
        {{ Form::submit('Delete', ['class' => 'btn btn-danger']) }} 
       {{ Form::close() }} 

      </td> 
      </tr> 
      @endforech 
+0

@ Sameer Shaikh:所以只是为了得到这个权利。带有标签的例外的原因是什么?为什么它与表单一起工作?为什么我不能在没有Form的情况下调用@destroy方法? – Mamulasa

+1

因为删除资源所需的http方法是“DELETE”。正常链接有“GET”的Http方法而不是delete.excluding获取请求所有其他请求只能通过表单进行。即。放,补丁,删除等 –

2

尝试做这样的

public function destroy($id) { 
    $article = Article::findOrFail($id); 
    $article->delete(); 

    return view('dashboard')->with([ 
    'flash_message' => 'Deleted', 
    'flash_message_important' => false 
    ]); 
} 
2

您需要使用delete方法来调用destroy()动作,例如:

{!! Form::open(['method' => 'Delete', 'route' => ['article.destroy', $id]]) !!} 
<button type="submit" class="btn">Delete article</button> 
{!! Form::close() !!} 

你可以用”请使用a href链接。

+0

所以只是为了得到这个权利。带有标签的例外的原因是什么?为什么它与表单一起工作?为什么我不能在没有Form的情况下调用@destroy方法? – Mamulasa

+0

你可以在没有窗体的情况下使用destroy,但是你需要创建一个需要更多代码行的ajax调用。 – lewis4u