如何检测请求的来源?

时间:2017-02-23 02:38:30

标签: php mysql laravel-5.4

目前我有一个控制器,它控制发送的数据和完成的操作 例如,当我点击主页时,我会点击Route::get('home', 'Controller@select');,它会选择现有数据并在该页面显示。
在同一页面上,我提供了一个表单,用户可以在其中输入数据并按下提交按钮,这将点击此Route::post('home', 'Controller@insert');,这是有效的,因为它可以区分GET(从其他页面到主页)和POST (来自同一页面,但是从提交按钮表单输入)。

现在,我在同一页面上有DELETE按钮,但这个是我使用get,所以如果我仍然使用Route::get('home', 'Controller@delete');,它就不会工作,因为它Controller@select会覆盖它。

我的问题是如何检测请求的来源,以便为用户的不同请求准备不同的操作?
我有一个基本的PHP知识,我希望它类似于if(isset($_GET['delete'])),删除操作。

另一种解决方案是将所有页面移动到不同的页面,然后将其重定向到主页,但我仍然希望坚持使用相同的页面,以便用户方便地查看数据流。

3 个答案:

答案 0 :(得分:0)

如果您使用Route :: get(' home',' Controller @ select'),您需要更改路线;当你去url home进行删除时你会注意到Controller-> select()方法你应该尝试像Route::get('home/delete', 'Controller@delete');这样的东西,当你去url home / delete会指出到Controller->delete()

答案 1 :(得分:0)

您可以添加"?delete = 1"然后检查它"选择"方法;

Route::post('delete', 'Controller@drop');

或者你可以Route::delete('home', 'Controller@drop'); 但是你必须通过ajax请求发出删除请求,如:

 $("#deleteButton").click(function() {
     $.ajax({
      method: "DELETE",
      url: "index.php",
     })
    });

答案 2 :(得分:0)

当您尝试执行删除操作时,应将方法设置为DELETE。但是,默认情况下,我们只有GETPOST方法。 Laravel有很好的环绕(method_field())来实现这个目的。您只需在表单中添加_method字段即可。

注册路线

Route::destroy('home', 'Controller@destroy');

按HTML格式

<form method="POST" action="home">
    {!! csrf_field() !!}
    {!! method_field('DELETE') !!}
</form>

通过Ajax

$.ajax({
    url: "home",
    method: "POST",
    data : { '_method' : 'DELETE', '_token' : 'YOUR CSRF TOKEN HERE'}
})