Laravel删除文件NotFoundHttpException

时间:2016-12-01 09:35:32

标签: php laravel laravel-5 laravel-5.2

这是我在我看来的表格

         {!! Form::open(['url' => ['documents/{file}/{id}', $file->name, $file->id],'method' => 'delete']) !!}
         {!! Form::token() !!}
         {!! Form::submit('Delete') !!}
         {!! Form::close() !!}

我从数据库和原始文件中删除文件的控制器

public function destroyFile($file_name, $id)
{
    File::findOrFail($id)->delete();
    $file_path = storage_path('documents').'/'.$file_name;
    $destinationPath = $file_path; File::delete($file_path);
    return redirect('/documents');
}

这是路线

Route::delete('documents/{file}/{id}','FilesController@destroyFile');

当我按下提交按钮时,我得到NotFoundHttpException

4 个答案:

答案 0 :(得分:2)

尝试使用此

print

实际上,他们的答案是正确的。你需要_method是DELETE。当我使用它时。 Laravel为我做。

或者你可以把它放在你的表格上

{!! Form::open(['method' => 'DELETE', 'action' => ['FilesController@destroyFile', $file->name, $file->id] ]) !!}

<input type="hidden" name="_method" value="DELETE">

答案 1 :(得分:0)

在大多数浏览器中,无法将这种方法与html表单一起使用,大多数只支持GETPOST。 所以这个请求不起作用的原因是浏览器将此作为GET请求发送,这是默认设置。

但是,在使用XMLHttpRequests(ajax)时,大多数主流浏览器都支持

GETPOSTPUTDELETE

答案 2 :(得分:0)

在表单中添加{{ method_field('DELETE') }}

{!! Form::open(['url' => ['documents/{file}/{id}', $file->name, $file->id],'method' => 'delete']) !!}
{{ method_field('DELETE') }}
{!! Form::token() !!}
{!! Form::submit('Delete') !!}
{!! Form::close() !!}

答案 3 :(得分:0)

原因是HTML表单不支持PUT,PATCH,DELETE操作。基本上你需要像这里描述的那样欺骗它们。 https://laravel.com/docs/5.2/routing#form-method-spoofing