使用 FormData Javascript 发送布尔值 - Vuejs + Laravel 应用程序

Posted

技术标签:

【中文标题】使用 FormData Javascript 发送布尔值 - Vuejs + Laravel 应用程序【英文标题】:Sending Boolean with FormData Javascript - Vuejs + Laravel app 【发布时间】:2017-02-25 03:50:28 【问题描述】:

我正在尝试通过 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】:

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

php中将字符串转换为布尔值

$boolValue = ($stringToTest === 'true');

以上代码参考from this *** answer

【讨论】:

以上是关于使用 FormData Javascript 发送布尔值 - Vuejs + Laravel 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 fetch 将 FormData 从 javascript 发送到 ASP.NET Core 2.1 Web API

JavaScript中 FormData 对象详解

我可以在javascript中将数组附加到“formdata”吗?

PHP文件上传,发送formdata对象

如何访问使用 websockets 发送的烧瓶中的 formData?Flask-SocketIO

如何在 javascript 中的 FormData 中附加对象?