php - Laravel $request->all() 使用 multipart/form-data 为空

标签 php angular laravel

我发送的请求包括表单数据对象,其中包含一些从 angular 4 到 laravel api 的数据......有时请求数据被正确接收,其他时候请求为空“空请求”

这是我的请求详情

Accept:application/json
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9
Authorization:Bearer ---------
Connection:keep-alive
Content-Length:973
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarydEkuATdI8JBFdnBM
Host:127.0.0.1:8000
Origin:http://localhost:4200
Referer:http://localhost:4200/shop_admin
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36

请求负载

------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="business_id"

249
------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="maintenance_flag"

0
------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="type"

shop
------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="name"

qewqweqweqwe
------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="website_uri"


------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="phone_number"


------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="facebook_link"


------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="logo_uri"

uploads/businesses/249/249_1.jpg
------WebKitFormBoundarydEkuATdI8JBFdnBM
Content-Disposition: form-data; name="brands"

undefined
------WebKitFormBoundarydEkuATdI8JBFdnBM--

here is a screenshot for request back from laravel into console

更新

这是我的代码

Angular 边:

表单数据对象 这是 Angular 形式的数据对象

let formData: FormData = new FormData();
formData.append( 'business_id', that.businessId );
formData.append( 'maintenance_flag', that.maintenance_flag );
formData.append( 'type', edit_type );
formData.append( 'name', name );
formData.append( 'website_uri', website );
formData.append( 'phone_number', phone );
formData.append( 'facebook_link', face );
formData.append( 'logo_uri', that.basicData.logo_uri );
formData.append( 'brands', that.selectedBrands );
if ( pic.files.length > 0 )
  formData.append( 'logo_uri', pic.files[ 0 ] );

接口(interface):

that.apiService.changeBusiness( formData ).subscribe( ( res ) => 
{
    console.log( res );
}

shopUpdate ( shop_basic_info ){

    return this.http.post( environment.api_base_url + 'api/shop_update', shop_basic_info ).map( res => res.json() );

}

laravel 端

路线

Route::post('/shop_update', 'ShopController@handleUpdate');

Controller 文件

public function handleUpdate(Request $request)
{
    return $request->all();
}

最佳答案

这是 PHP 的问题。

除非请求方法是 POST,否则它不会解析多部分表单数据:

https://bugs.php.net/bug.php?id=55815

解决方案:

有很多解决方法,但没有一个是整洁的,但是:

  1. 使用 PATCH/PUT 进行最佳实践,或仅使用 POST 进行演示场景。

  2. 如果您无法切换方法,则只需重新编写不使用 Formdata 的代码,PHP 就会正确处理该文件。

  3. 使用 POST 发送并添加 _method:put on formData

(3) 像这样:

formData.append('_method', 'PUT')

关于php - Laravel $request->all() 使用 multipart/form-data 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47676134/

相关文章:

Angular 2如何禁用kendo-dropdownlist

php - SQLite : GROUP BY without Aggregate

php - MySQL Session 变量在触发器中的作用

php - Laravel 工厂 : Manual Increment of Column

html - 复制粘贴下拉数据从excel到 Angular Material 表(或导入excel)并将其转换为下拉

mysql - Laravel 选择左连接查询

php - 本地点,服务器上的逗号

angular - 如何将 Angular Material 表导出为 excel 或 pdf 或 csv

Laravel 家园 : Unknown database 'projectadmin_db'

laravel - Vagrant - Homestead 设置多个站点