提问者:小点点

CRUD Laravel 5如何链接到破坏资源控制器?


我有一个链接

<a class="trashButton" href="{{ URL::route('user.destroy',$members['id'][$i]) }}" style="cursor: pointer;"><i class="fa fa-trash-o"></i></a> 

这个链接应该直接指向用户控制器的销毁方法,这是我的路由Route::资源('/user','Backend\UsersController');

UserController是一个资源控制器。但此时此刻它在引导我走向表演法而不是走向毁灭法


共3个答案

匿名用户

您需要发送DELETE请求,而不是GET请求。您不能使用链接来实现这一点,因此必须使用AJAX请求或表单。

下面是通用表单方法:

<form action="{{ URL::route('user.destroy', $members['id'][$i]) }}" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <button>Delete User</button>
</form>

如果您正在使用Laravel 5.1或更高版本,那么您可以使用Laravel的内置助手来缩短代码:

<form action="{{ route('user.destroy', $members['id'][$i]) }}" method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
    <button>Delete User</button>
</form>

如果您使用的是Laravel 5.6或更高版本,则可以使用新的Blade指令进一步缩短代码:

<form action="{{ route('user.destroy', $members['id'][$i]) }}" method="POST">
    @method('DELETE')
    @csrf
    <button>Delete User</button>
</form>

您可以在这里阅读有关Laravel中的方法欺骗的更多信息。

匿名用户

这是因为您是通过GET方法而不是DELETE方法请求资源的。看:

DELETE  /photo/{photo}  destroy     photo.destroy
GET     /photo/{photo}  show    photo.show

两个路由都有相同的URL,但标头谓词标识要调用的URL。看那张安静的桌子。例如,通过ajax,您可以发送删除请求:

$.ajax({
    url: '/user/4',
    type: 'DELETE',  // user.destroy
    success: function(result) {
        // Do something with the result
    }
});

匿名用户

我使用此模板的“资源/视图/utils/delete”。刀身php'

<form action="{{ $url or Request::url() }}" method="POST">
    {{ method_field('DELETE') }}
    {{ csrf_field() }}
    <button type='submit' class="{{ $class or 'btn btn-danger' }}" value="{{ $value or 'delete' }}">{!! $text or 'delete' !!}</button>
</form>

称为:

@include('utils.delete',array( 'url' => URL::route('user.destroy',$id),'text' => '<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> delete me'))