面包屑思维模型实战模型错题集结构手册流程手册自我检测专题模块
-
微信小程序前端微信小程序前端易错点收集查看
-
css/less/sass样式控制在开发过程中的一些样式控制bug规避查看
-
tp5开发小程序tp5开发小程序时错误积累查看
-
PHP错题集PHP在实际开发过程中遇到的问题查看
-
MySql数据库使用MySql在实际开发中遇到的错误总结查看
-
TP5错题集积累tp5框架在实际开发过程中遇到的问题查看
-
uni-app爬坑主要用于uni-app项目中遇到的一些问题查看
-
Vue.js易错收集vue.js项目常见错误收集整理查看
-
uni-app开发微信小程序uni-app开发微信小程序的一些爬坑积累查看
-
LinuxLinux在部署、开发、运维时遇见的错误积累查看
-
安全设计常见安全设计查看
-
Redis项目中使用redis的相关错误积累查看
-
前端特效前端特效相关错题集查看
最新博文
-
foreach下使用save向数据库存数据,只能存一次,如何解?
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
自动完成(数据完成)
thinkphp数据完成主要是和修改器一起使用。
数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库。
系统支持
auto
、insert
和update
三个属性,可以分别在写入、新增和更新的时候进行字段的自动完成机制,auto
属性自动完成包含新增和更新操作例如我们定义
User
模型类如下:<?php
namespace app\index\model;
use think\Model;
class User extends Model
{
protected $auto = ['name', 'ip'];
protected $insert = ['status' => 1];
protected $update = [];protected function setNameAttr($value)
{return strtolower($value);
}protected function setIpAttr()
{return request()->ip();
}
}数据自动完成如果需要写入固定的值,可以直接指定(例如上面的status字段固定写入了1),类似于数据表字段的默认值功能。
在新增数据的时候,会对
name
、ip
和status
字段自动完成或者处理。$user = new User;
$user->name = 'ThinkPHP';
$user->save();
echo $user->name; // thinkphp
echo $user->status; // 1
在更新数据的时候,会自动处理
name
字段的值及完成ip
字段的赋值。$user = User::find(1);
$user->name = 'THINKPHP';
$user->save();
echo $user->name; // thinkphp
echo $user->ip; // 127.0.0.1
阅读更多风口下的猪2019-06-09【thinkphp】
-
修改器
thinkphp修改器的主要作用是对模型设置的数据对象值进行处理。
在实际项目开发中,修改器往往和数据完成(自动完成)一起使用,主要解决数据库写入数据时对数据的处理。
详细的处理包括:字符串恒定小写、发表文章获取当前时间、修改文章修改字段储存的时间戳、评论获取评论者的id等具体的需求场景会经常用到。
一.修改器方法的命名规范
setFieldNameAttr
主要是set+数据表字段或者模型数据属性驼峰命名+Attr
二.定义了修改器之后会在下列情况下触发
- 模型对象赋值;
- 调用模型的
data
方法,并且第二个参数传入true
; - 调用模型的
save
方法,并且传入数据; - 显式调用模型的
setAttr
方法; - 定义了该字段的自动完成;
三.例子说明
<?php
class User extends Model
{
public function setNameAttr($value)
{
return strtolower($value);
}
}
如下代码实际保存到数据库中的时候会转为小写
$user = new User();
$user->name = 'THINKPHP';
$user->save();
echo $user->name; // thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
解决 json_encode 格式化的数据出现反斜杠的问题
PHP
阅读更多风口下的猪2019-06-09【PHP】
-
$info->getSaveName()做文件、图片上传时,生产路径名称斜杠是反的
thinkphptp5中的getSaveName()主要用于获得文件上传位置,
上传文件代码如下:(其将文件通过request对象获取,并通过move方法存到public/uploads下)
$file = request()->file('文件名');//首先获取到文件的名称
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
//获取到上传之后到文件详细位置,打印出来为:根目录/public/uploads/上传至uploads的随机名称
(1)windows和linux使用getSaveName()的不同
windows是反斜杠\
linux是正斜杠/
阅读更多风口下的猪2019-06-09【thinkphp】
-
表单递交action转至另一控制器方法时url报错not found
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
模型下使用db()交给db类执行destroy(),结果报错
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
分页概述
thinkphp实现分页主要包括两个步骤:
1.将数据分页(在模型中操作,返回的是一个带有分页参数和相应方法这些分页信息的对象,主要使用paginate()方法);
2.显示分页条(这个主要在控制器和模板中实现,主要使用object->render()方法)。
一.数据分页,返回数据分页对象
ThinkPHP5.0
内置了分页实现,要给数据添加分页输出功能在5.0
变得非常简单,可以直接在Db
类查询的时候调用paginate
方法。用paginate()代替select()取数据表的所有数据。例如:
$list = Db::name('user')->where('status',1)->paginate(10);
$list = User::where('status',1)->paginate(10);
二.显示分页条
分页条主要依靠render()
我们来看看render()返回的数据是什么
string ' <ul class="pagination"> <li class="disabled"><span>«</span></li> <li class="active"><span>1</span></li> <li><a href="/thinkphp01/index.php/admin/tag/index.html?page=2">2</a></li> <li><a href="/thinkphp01/index.php/admin/tag/index.html?page=3">3</a></li> <li><a href="/thinkphp01/index.php/admin/tag/index.html?page=2">»</a></li> </ul>' (length=342)
原来object->render()输出的是一段关于分页的ul和li代码。代码中我们可以清楚地看见有分页条涉及的“页数、上一条、下一条图标”等信息。
所以我们直接在模板中使用render()执行的结果即可。
1.在模板中直接使用
{$list->render()}或者将其放在div中通过控制div得样式来控制分页条的位置、样式(这是实际项目中常用的,因为分页条的样式要根据项目要求改嘛)
2.将分页结果赋值给模板变量,然后在模板中调用
$list = User::where('status',1)->paginate(10);
// 获取分页显示
$page = $list->render();
// 模板变量赋值
$this->assign('list', $list);
$this->assign('page', $page);
// 渲染模板输出
return $this->fetch();
注意:在项目开发中如果前端框架使用的是bootstrap,直接给外div定义分页类样式,在内部放模板变量即可。
例如:
<div class="pagination pagination-sm pull-right">
{$page}//或者{$list->render()}
</div>
阅读更多风口下的猪2019-06-09【thinkphp】
-
db()助手函数连接数据库时,写全名会报错
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
Cannot access empty property(使用_initialize()在控制器中实例化模型时调用其方法)
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
比较标签
thinkphp比较标签用于简单的变量比较,复杂的判断条件可以用if标签替换,比较标签是一组标签的集合,基本上用法都一致,如下:
{比较标签 name="变量" value="值"}
内容
{/比较标签}
系统支持的比较标签以及所表示的含义分别是:
标签 含义 eq或者 equal 等于 neq 或者notequal 不等于 gt 大于 egt 大于等于 lt 小于 elt 小于等于 heq 恒等于 nheq 不恒等于 他们的用法基本是一致的,区别在于判断的条件不同,并且所有的比较标签都可以和else标签一起使用。
一.普通使用
要求name变量的值等于value就输出
{eq name="name" value="value"}value{/eq}
或者
{equal name="name" value="value"}value{/equal}
也可以支持和else标签混合使用:
{eq name="name" value="value"}
相等
{else/}
不相等
{/eq}
当 name变量的值大于5就输出:
{gt name="name" value="5"}value{/gt}
当name变量的值不小于5就输出:
{egt name="name" value="5"}value{/egt}
二.变量情况(实际开发常用)
1.name可以是字符串、数组、对象属性、系统变量等
比较标签中的变量可以支持对象的属性或者数组,甚至可以是系统变量,例如: 当vo对象的属性(或者数组,或者自动判断)等于5就输出
{eq name="vo.name" value="5"}
{$vo.name}
{/eq}
当$vo['name']等于5就输出
{eq name="vo['name']" value="5"}
{$vo.name}
{/eq}
而且还可以支持对变量使用函数 当vo对象的属性值的字符串长度等于5就输出
{eq name="vo:name|strlen" value="5"}{$vo.name}{/eq}
2.value可以为变量,不过要加$前缀
{eq name="vo:name" value="$a"}{$vo.name}{/eq}
三.通用写法---compare标签
所有的比较标签可以统一使用compare标签(其实所有的比较标签都是compare标签的别名)
{compare name="name" value="5" type="eq"}value{/compare}
等效于
{eq name="name" value="5" }value{/eq}
阅读更多风口下的猪2019-06-09【thinkphp】