使用FormData Javascript发送布尔值 - Vuejs + Laravel app

时间:2016-10-15 22:09:41

标签: javascript php laravel laravel-5.3 form-data

我试图通过Axios库提交一个FormData javascript对象,我无法使它工作,因为有一个布尔字段(is_active)必须以我的api作为布尔值,并且FormData对象将其转换为字符串!

我试图在没有FormData的情况下制作它然后它完美无缺!

任何人都知道让它运作的最佳方法吗?实际上我在Laravel请求上做了一个非常糟糕的工作来修复这个领域......我不认为这是最好的主意,但它现在有效!

任何人都有一个很好的解决方案吗?

我目前有工作代码,但我想让它变得更好!

我的控制器和我的要求:

PS:我已经在$ rules函数上做了IF来修复布尔问题...如果我把它作为字符串去,我的数据库会出现问题,其中字段必须是布尔值我也有删除该字段上的布尔验证

class PostRequest extends FormRequest
{
    public function rules()
    {
        if (in_array($this->get('active'), ['true', 'false'])) {
            $this->offsetSet('active', $this->get('active') == 'true');
        }

        $rules = [
            'title'             => 'required|string',
            'slug'              => 'required|alpha_dash|unique:posts,slug',
            'photo'             => 'required|image',
            'publish_date'      => 'required|date_format:d/m/Y',
            'summary'           => 'required',
            'content'           => 'required',
            'author_id'         => 'required|exists:authors,id',
            'category_id'       => 'required|exists:categories,id,flag,posts',
//            'active'            => 'boolean',
        ];

        return $rules;
    }
}

class PostsController {
    public function store(PostRequest $request)
    {
        try {
            $model = new Post($request->all());
            $model = $model->save();
        } catch (\Exception $e) {
            return response()->json($e->getMessage(), 422);
        }
        return $model;
    }    
}

现在有我的javascript代码

PS:我正在使用服务,因此我的createPost会触发发出请求的axios客户端

let data = new FormData()
let record = _.cloneDeep(this.record)

for (var key in record) {
  if (record[key] === 'true' || record[key] === 'false')
    data.append(key, record[key] === 'true')
  else
    data.append(key, record[key])
}

return _.isNil(this.record.id) ? createPost(data) : updatePost(data.id, data)

1 个答案:

答案 0 :(得分:0)

FormData只能以字符串或缓冲区的格式发送,因此您无法通过FormData发送布尔值。如果你真的只需要布尔值,只需在服务器端将字符串转换为布尔值。

在php

中将字符串转换为布尔值
$boolValue = ($stringToTest === 'true');

参考from this stackoverflow answer以获取上述代码