Tp5·数据格式汇总

1.TP5查询完数据格式是什么样的格式?

=============================起始线===============================

查询一条数据:find()
$model = model("News");
$result = $model->find(); 

查询完的数据,就是一个key->value的形式,我们可以直接转为json
下面的操作都是可以的:

$result['title'];//获取title字段值
$json_data = json_encode($result) ; //直接生成json字符串
查询多条数据:select()
$model = model("News");
$result = $model->select();

查询完数据之后,是一个Array,我们可以json_data = json_encode($result) ; //直接生成json字符串

返回查询结果

如果使用Controller的result方法,我们使用如下,controller的方法。

$this->result($result,0,'ok','json') ; 

但是需要注意的是,我们是需要标注册数据格式的,第四个参数“json"代表我们result需要以一个
json串的形式返回,一定要添加。这一点格外要注意一下。
---------------------------------------------------结束线-------------------------------------------------------

2. 前端的form表单提交到Tp5的处理

=============================起始线===============================

为什么我要记录这段内容?

在一个from表单提交之前,我们一般是有必要通过js对其做一些前端的验证的,做完验证之后,会把from表单上传,上传之前,from表单的格式是什么样的?我们来看一下。
我们看一下jQuery的表单验证代码:

//表单验证
    $("#form-singwaapp").validate({
      rules:{
        title:{
          required:true,
        },
        small_title:{
          required:true,
        },
        catid:{
          required:true,
        },
        sources_type:{
          required:true,
        },
        is_allowcomments:{
          required:true,
        },

      },
      onkeyup:false,
      focusCleanup:true,
      success:"valid",
      submitHandler:function(form){
        singwaapp_save(form);// 需要小伙伴自定义一个singwaapp_save方法 用来处理抛送请求的哦
      }
    });

$("#form-singwaapp")通过id选择器获取到了我们的form表单,最下边有一个提交的回调:
submitHandler
提交的时候,会把form表单传入方法,我们来看一下方法里面,如何把这个from表单转为一个可post的数据:

function singwaapp_save(form){
      //可以用于打印数据
      var data =  $(form).serialize();
      console.log("form->"+form);
      console.log("$(form).serialize()->"+data);

      //获取form的url属性值,当前打印获取的值是:/admin/news/add.html
      var url = $(form).attr('url') ; 
      //ajax的post方法使用,第一个是url , 第二个是提交的form数据,第三个是回调,第是个dataType[xml、json、script 或 html]
      $.post(url,data,function(result){
        
        console.log(result) ; 

        //json可以直接使用
        if(result.code==0){
          self.location = result.data.jump_url ; 
        }else{
          layer.msg(result.msg , {icon:5, time:2000})
        }
        
      },'JSON');
  }

我们先着重看一下下面的这几行代码:

      var data =  $(form).serialize();
      console.log("form->"+form);
      console.log("$(form).serialize()->"+data);

1:我们看到 data是被序列化的,序列化之前和之后的打印是什么样的呢?如下:

form->[object HTMLFormElement]
$(form).serialize()->title=%E6%B5%8B%E8%AF%95%E6%96%87%E7%AB%A0&small_title=aaaa&catid=0&description=dddd&is_allowcomments=&is_head_figure=&is_position=&image=%2Fuploads%2F20200323%2F473e0931fae9df8e761f587105a4dec5.png&content=%3Cp%3Edfdfdafdsaf%3C%2Fp%3E

我们可以看到,被序列化之前是一个from对象,是一个HTML的对象,序列化之后,是一个key-value形式的字符串。 我们就可以进行提交操作了。

---------------------------------------------------结束线-------------------------------------------------------

3.Tp5的post数据接收

=============================起始线===============================

request()->post() ;

我们看一下截断的一点代码,这段代码来自于登录的post请求:

if(request()->isPost()){

            $data = request()->post() ; 

            if(is_array($data)){
                echo "post is a Array()" ; 
            }

            halt($data);

我们看一下打印吧:
post is a Array()
array (size=3)
'username' => string '张三' (length=6)
'password' => string '123456' (length=6)
'verify' => string 'nebb' (length=4)

我们可以看到,request()->post() 获取到的表单数据,变成一个k-v形式的数组数据,我们可以直接使用。

input("post.");

我们看一下另外一个形式input("post.")

$dt = input("post.") ; 
halt($dt);

我们来看一下打印结果:
array (size=3)
'username' => string '张三' (length=6)
'password' => string '123456' (length=6)
'verify' => string 'w8pn' (length=4)
是相同的

综上,所以form表单提交之后,使用request()->post()接收,或者使用input("post.")来接收,都可以获取到一个k=>v形式的数组。我们可以方便地使用它来做数据处理。

---------------------------------------------------结束线-------------------------------------------------------

4.Tp5的post或者get数据持久化

=============================起始线===============================
我们想要把get或者post到的数据,持久化到数据库。
首先我们要明确一点:
我们通过post或者get获取到的数据,已经是一个[key=>value]的数组数据了,通过上面写的内容我们可知。
然后tp的数据库框架,可以直接把[key=>value]数组保存到数据库实例中。
有一点我们需要注意:
如果post || get上来的数据,key和我们数据库的字段如果不一致,我们就不应该保存到数据库中。
在post || get上来的数据,和数据库中的数据不一致时,我们数据库中有什么字段,我们就保存什么字段。
通过:allowField(true)
方法来规范。

model("AdminUser")->allowField(true)->save($data);
allowField(true)的功能

如果数组 [key=>value] 中的数据和我们的数据库字段不对应时,我们要以数据库字段为准,只保存数据key中和数据库字段相同的数据,其它的数据忽略。
注:我们在使用model("AdminUser")->allowField(true)->insert($data);时报错,暂时没去查询原因,我们暂时先不使用insert()去插入数据。

---------------------------------------------------结束线-------------------------------------------------------

你可能感兴趣的:(Tp5·数据格式汇总)