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
更改为 form
和 delete 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
我有一个页面,我可以在其中将版主添加到我的论坛类别 (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
更改为 form
和 delete 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