Laravel 5:从数据透视表 table 中删除记录时出现路由问题 - NotFoundHttpException

Laravel 5: removing a record from a pivot table with routing issue - NotFoundHttpException

我有一个页面,我可以在其中将版主添加到我的论坛类别 (subreddit),并且我可以看到我已分配的现有版主列表。两者在同一视图上 create.blade.php

在每个版主旁边,我有一个删除 link 以允许 subreddit 的所有者也删除版主。

但是点击的时候报如下错误

NotFoundHttpException in RouteCollection.php line 161

注意:为了访问添加版主的路径,我使用这个subreddit/{id}/moderators/create

我知道我的路线可能是这里的问题,这些是我正在使用的路线

Route::resource('subreddit', 'SubredditController');
Route::resource('subreddit.moderators', 'ModeratorsController');

这是ModeratorsController

中的destroy()方法
public function destroy(Moderator $moderator, Subreddit $subreddit)
{
   $mod = Moderator::where('subreddit_id', '=', $subreddit->id)->where('user_id', '=', $moderator->id)->get();
   $mod->delete();
   return 'done';
}

这是视图中的删除 link

<a href="{{ action('ModeratorsController@destroy', [$moderator->id]) }}" class="btn btn-danger btn-xs"><span class="glyphicon glyphicon-remove"></span> Del</a>

我认为上面的 action() 在这里不起作用,因为它将 subreddit_id 替换为 moderator.id 像这样 subreddit/2/moderator 其中 2 是已替换 17 的版主,这是我添加版主的 subreddit 的 ID。

我也尝试过测试不同的路由以查看它是否可行,例如 subreddit/{id}/moderators/{modid}/delete 但总是出现相同的错误。

当您使用resource时,您需要发送DELETE HTTP request

并且您正在使用 nested resource,您需要同时发送 $moderator->id$subreddit->id

在你的情况下,你需要将 a tag 更改为 formdelete method

{!! Form::open(['action' => ['ModeratorsController@destroy', $moderator->id, $subreddit->id], 'method' => 'delete']) !!}
  {!! Form::submit('Delete') !!}
{!! Form::close() !!}

并且您可能需要进行一些更改以销毁函数

public function destroy($subreddit_id, $moderator_id)
{
   $mod = Moderator::where('subreddit_id', $subreddit_id)
          ->where('user_id', $moderator_id)->first();
   $mod->delete();
   return 'done';
}

了解更多信息http://laravel.com/docs/5.1/controllers#restful-resource-controllers