Laravel如何处理来自浏览器的PUT请求?

Dar*_*ren 14 laravel

我知道浏览器只支持POSTGET请求,Laravel PUT使用以下代码支持请求:

<?= Form::open('/path/', 'PUT'); ?>
    ... form stuff ...
<?= Form::close(); ?>
Run Code Online (Sandbox Code Playgroud)

这将生成以下HTML

<form method="POST" action="http://example.com/home/" accept-charset="UTF-8">
    <input type="hidden" name="_method" value="PUT" />
    ... form stuff ...
</form>
Run Code Online (Sandbox Code Playgroud)

框架如何处理这个?是否决定将请求发送到哪个路由之前捕获POST请求?它是否使用ajax向框架发送实际内容?PUT

Lau*_*nce 49

它插入一个隐藏字段,该字段提到它是PUT或DELETE请求

看到这里:

echo Form::open('user/profile', 'PUT');
Run Code Online (Sandbox Code Playgroud)

结果是:

<input type="hidden" name="_method" value="PUT">
Run Code Online (Sandbox Code Playgroud)

然后它在request.php核心文件中路由时查找_method (在代码中查找'spoofing') - 如果它检测到它 - 将使用该值路由到正确的restful控制器.

它仍然使用"POST"来实现这一目标.没有使用ajax.

  • @mike这个问题具体说明了"Laravel框架如何处理它".是的,它使用Symfony组件 - 但在一天结束时,实现是通过Laravel.通过使用Laravel Form :: open()来提出问题 - 这是一个特定的Laravel实现. (2认同)

Wil*_*ley 14

Laravel使用symfony Http Foundation来检查这个_method变量,并根据其内容将请求更改为PUT或DELETE.是的,这发生在路由发生之前.