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()去插入数据。
---------------------------------------------------结束线-------------------------------------------------------