尝试使用PATCH方法可与AJAX一起使用,但不能与常规html形式一起使用 - php

我目前正在尝试http://altorouter.com/,到目前为止,它对我来说效果很好,除了我遇到的这个问题

我的路线设置如下:

$router->map( 'PATCH', '/admin/pages', 'pageController@update');

如果我使用以下jquery,则路由可以正常工作:

$.ajax({
    type: "PATCH",
    url: "/admin/pages",
    data: {page_items:page_items, page_name: 'test_page'},
    success: function(returned_data)
    {
        console.log(returned_data);
    }
});

但是,无论我在HTML中放入什么内容,都无法以接受PATCH的方式提交常规表单:

<form action="/admin/pages" method="post">
    <input type="hidden" name="form_function" value="edit_theme">
    <input type="hidden" name="_METHOD" value="PATCH">
    <button type="submit">Save Page</button>
</button>

我已经尝试过“ _METHOD”,“ _ method”,“ method”等。它们都不起作用。

我也尝试过

method="PATCH"

但这只会导致它执行GET。

当我在目标页面上回显$ _SERVER ['REQUEST_METHOD']时,我得到的ajax为“ PATCH”,但表单的为“ POST”。希望有人能帮忙。

参考方案

简而言之,您不能。

如您在W3 Spec中看到的

基于HTML的表单的唯一有效方法是“ GET”和“ POST”。

但是,您可以根据需要在服务器端解决此问题。这里有一篇有关Laravel如何做到的好文章:Theres no Put/Patch Delete Methods

该文章的简短代码片段:

<form method="POST" action="" accept-charset="UTF-8">
    <input name="_method" type="hidden" value="PUT">
</form>

<form method="POST" action="" accept-charset="UTF-8">
    <input name="_method" type="hidden" value="PUT">  
</form>

如果您不使用Laravel并希望手动构建表单,则不能使用PUT / PATCH-浏览器中的表单不支持这种方法-只是GET和POST。那么Laravel如何使其与{{Form :: create(['method'=>'PUT'])}}一起使用?
实际上,在幕后生成的HTML看起来像这样:

没错,Laravel构造了一个名为_method的隐藏字段,
然后在提交表单时检查它,将其路由到正确的位置
控制器方法。

因此,如果出于任何原因您需要自己构建FORM标签,
不要放(适用于补丁和删除)-它
就是行不通。如有必要,请添加隐藏字段。

回到您的问题,Altorouter。似乎他们的文档在这里为我找到了最好的指南,https://recalll.co/app/?q=rest%20-%20PHP%20detecting%20request%20type%20(GET%2C%20POST%2C%20PUT%20or%20DELETE)%20-%20Stack%20Overflow在寻找更好的路由器时可能值得您这样做,因为Alto似乎在3年左右没有更新。

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

Div单击与单选按钮相同吗? - php

有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date&#…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…