thinkPHP5.0–基础篇
第一章 thinkPHP5.0配置
1.惯例配置(框架配置)
convention.php----框架默认配置,用config()函数输出
2.应用配置
app同级目录创建一个conf文件夹,里创建config.php文件,配置覆盖convention.php
3.扩展配置
在conf文件夹下创建extra文件夹,里创建 需配置的项为文件名 文件里的配置为需配置项(数组)的内容(数组内容),扩展配置覆盖应用配置config
4.场景配置
第一种:在config.php里设置’app_status’,将值设置为:场景名称,如:home;该配置文件同级的目录下,创建与场景名称同名的配置文件,如home.php;
第二种:根据需要在conf文件夹里创建index文件夹,里创建config.php和home.php文件(php中文网)
备注:如果在home.php里配置database项,则需要把database项的全部配置都拷贝过来
还有一种就是在场景文件home.php加个配置‘app_address’=> ‘home’(?慕课网)
5.模块配置
在app同级的conf文件夹下创建index文件夹,里创建config.php,此针对的是app中index模块的配置,里也可创建extra文件夹,里创建demo.php为扩展配置项。同理可配置admin模块的配置。
6.动态配置
获取配置:config();配置设置:config(“配置名”,”配置值”);
仅在当前函数中有效
7.Config类和config助手函数
8.环境变量的配置和使用
在app同级目录下创建.env文件,在里面设置需要的值,如status=dev。
然后在配置文件或者类文件中use think\Env;用Env::get(‘status’,’prod’);获取环境变量。第二个参数为默认值。
第二章 url和路由
9.入口文件绑定
第1种方法为在配置文件中配置’auto_bind_module’ => true,通过这两种方法可使入口文件绑定到同名模块api.php->api。Index.php->index模块
10.路由
1.在config.php中配置 ‘url_route_on’ => true,‘url_route_must’ => false。(如果为true则需要配置路由才能访问-route.php中配置,如news/6.html,一般不这样)。
2.在conf文件夹下创建route.php,里return[配置规则];
第三章请求和响应
11.请求对象获取
1.助手函数
$request=request();
2.类的实例
use think\Request;
$request=Request::instance();
3.注入到函数
use think\Request;
Index(Request $request)
12.请求对象参数的获取
注:如果要保存session,如上图所示。则需要在config.php中设置session
13.input助手函数(获取输入数据)
Input(‘post.id’,100,’intval’);等同于$request->post(‘id’,100,’intval’);第三个参数为过滤方法。 [‘get’, ‘post’, ‘put’, ‘patch’, ‘delete’, ‘route’, ‘param’, ‘request’, ‘session’, ‘cookie’, ‘server’, ‘env’, ‘path’, ‘file’]
14.响应对象(response)
Tp5中方法一般用return返回(内部机制规则)。最好不用echo或die()输出。Return的类型也有要求,如果直接返回一个array则会报错。所以需要配置相关参数。第一种是在那个模块的方法中返回的需要的类型可以在conf下创建该模块文件夹,下创建config.php,返回’default_return_type’ =>’ 类型 ’,
这种方法不推荐,会使得全部模块的返回同一种类型,不灵活,不符开发需要。
另一种直接在方法中定义限制条件,如下图:
第四章视图和模板
17.视图view
例如,在index/index/index中,我们要引入html文件,则需引入think\Controller;然后index类extends它。里面用$this->fetch();引入html文件。
另一种直接用view()助手函数,两者参数一样。
明细:
如果控制器里的方法直接返回一个字符串,可以使用$this->display();
总结: t h i s − > f e t c h ( ) ; 返 回 模 板 文 件 。 this->fetch();返回模板文件。 this−>fetch();返回模板文件。this->display();返回字符串
18.变量输出、赋值和替换
变量赋值的几种方式:
变量输出:
变量替换:
第一种:
第二种:在配置文件中配置view_replace_str项
默认在think\View.php中有配置默认的一些变量替换。如__ROOT__,URL,STATIC,CSS,JS。如果需要改变其默认值,可以在config.php文件中的view_replace_str项中改变其值。
19.系统变量原生标签
20.变量输出,调节器(过滤器)
21.模板循环标签
第一种:volist
Volist还有其他属性:
第二种:foreach
第三种:for
22.比较标签
1.相等
2.不相等
3.大于,大于等于
4.小于,小于等于
5.value使用变量要加$符号
23.条件判断标签
1.switch
2.range
Type的值有in,notin,between,notbetween,都有其快捷的写法
3.defined 常量是否定义
4.if标签
If标签在模板中最好不要大量使用,对性能不好,一般用switch就行了。
24.模板的布局-》包含和继承
1.包含,把需要重用的部分放在一个文件里,然后用{include file=’’ /}在其他页面引入它
2.继承
把模板文件放到base.php里面,然后在其他页面继承它,如下:
其他每个页面的title等其他部位不一样,则在base的模板文件中把需要替换的部位用{block name=’’}{/block}表示,然后在其他页面中用{block name=””}内容{/block}中的重写,如下图:
如果其他页面block需要使用模板中block的内容,则用{
block}表示,如下:
3.layout机制
Layout适合变动少的情况,要使用layout则需要在config中配置,并且在view下创建layout_name同名layout.html,此时即为其他页面的模板文件(其他页面$this->fetch()的时候)
其他页面的模板文件都为Layout.html文件,Layout.html中的{
CONTENT}部分即为每个页面的变化之处:
例如每个页面的title不同可用变量代替{$title}
thinkPHP5.0–模型篇
第一章:数据库的操作
1.数据库的连接操作
Connect里返回一个数组,里可配置数据库的参数,或一个字符串,为配置数据库的项,或为dsn方式,或config::get(“配置数据库的项”);可简化为上述一个字符串的方式。
2.数据库查询操作
$res = Db::query('select * from admin_users where id=1');
$res = Db::query('select * from admin_users where id=?',[1]);
Sql语句有两种写法,第二种数组中的每一项对应前面的每个?
$res = Db::execute("insert into user(username,password) values('小黄','12345')");
$res = Db::execute("insert into user(username,password) values(?,?)",['小黄','12345']);
Db::table('think_user')->where('id',1)->find();返回一条数据,一唯数组
Db::table('think_user')->where('id',1)->select();返回多条数据
使用table方式需要加表前缀
Db::name('user')->where('id',1)->find();
Db::name('user')->where('id',1)->select();
使用name方式不需要加表前缀,一般使用name方式连接表
返回某一列
Db::name('user')->column(‘email’,‘username’);多条数据,有第二个参数,则第二个参数为key值,第一个参数为value值
Db::name('user')->value(‘username’);一条数据
3.数据库添加
4.数据库更新操作
5.数据库删除
第二种写法:
删除全部数据的写法:(没有条件【where或直接delete()】不能删除数据)
6.条件构造器
$db = Db::name(‘user’);
//生成sql语句
$sql = $db->where(“id=1”)->buildSql();
$sql = $db->where(“id”,”1”)->buildSql();
$sql = $db->where(“id”,”<>”,”1”)->buildSql(); //id不等于1
$sql = $db->where(“id”,”between”,”1,10”)->buildSql();
$sql = $db->where(“id”,”between”,[1,10])->buildSql();
$sql = $db->where(“id”,”in”,”1,10,20”)->buildSql();
$sql = $db->where(“id”,”in”,[1,10,20])->buildSql();
$sql = $db->where([‘id’ =>1 ])->buildSql();
$sql = $db->where([
‘id’ => [‘egt’,1],
‘username’ => “innn”
])->buildSql();
可以链式使用,where为and,whereOr为or
备注:EQ =
NEQ <>
LT <
ELT <=
GT >
EGT >=
BETWEEN BETWEEN * AND *
NOTBETWEEN NOTBETWEEN * AND *
IN IN (*,*)
NOTIN NOT IN (*,*)
Dump($sql);
7.链式操作
第二章:模型
1.模型
使用model首先需要在conf下的config.php里配置database项,(在convention.php中获取)。要创建model下的模型文件和模型文件同名的数据表。一个模型对应一个数据库。如User.php模型对应user数据表。
2.使用模型查询数据
1.$res = User::get(1);
2.$res = User::get(function($query){
$query->where('username','eq','2222');
});
3.$res = User::where('id',3)->field('id,username')->find();
4.User::all(‘1,2,3’);
5.User::all([1,2,3]);
6.$res = User::where('id','<',3)->field(‘id,username’)->limit(2)->order(‘id DESC’)->select();
7.$res = User::all(function($query){
$query->where('id','<',3);
});
foreach ($res as $val) {
dump($val->toArray());
}
dump($res->toArray());
8.$res = User::where(‘id’,2)->value(‘email’);
9.$res = User::column(“email”,”username”);//第二个参数为key,第一个为value
3.使用模型添加数据
第一种方式:
$res = User::create([
'username' => "5555",
'password' => "5555",
'email' => "[email protected]"
]);
排除数据库中没有的字段,防止出错(过滤不存在的字段):
$res = User::create([
'username' => "5555",
'password' => "5555",
'email' => "[email protected]",
‘demo’ =>”sss”
],true);
只想插入需要的字段的值:
$res = User::create([
'username' => "5555",
'password' => "5555",
'email' => "[email protected]",
‘demo’ =>”sss”
],[‘username’,’email’]);
第二种方式:
allowField([‘username’]);//这种方式只插入username这个字段
第三种方式:插入多条数据:
4.使用模型更新数据
一般我们推荐使用第二种方式和第四种方式,返回影响记录的条数。
第一种:update方式
第二种:where
第三种:直接改变值
第四种:实例的save方法
第五种:实例的saveAll方法,批量修改多个值
5.使用模型删除数据
第一种:
第二种:
第三种:
6.模型聚合操作
7.模型获取器
在模型中建立模型获取器(函数,命名看图):当数据库中sex字段的值根据在模型中对应的设置返回结果显示在浏览器中。例,sex字段为1,代表男
8.模型修改器±自动完成
例,当数据库插入一条记录时,比如密码没有用md5加密,我们就可以在模型user.php中建立一个使插入数据md5加密的模型修改器:
$
val代表密码字段的值,$data代表整条插入的记录,7中的模型getSexAttr方法也可有第二个参数。
2.自动完成
当在index.php中执行操作时,根据操作的性质,如插入,或更新等来执行模型修改器,使数据库中的对应的字段中的值发生需要的改变:如下例子就是当index.php中执行插入操作时,数据库中time_insert字段发生模型修改器中的操作。其他操作对应
9.模型时间戳+软删除
使用模型时间戳,需要在模型文件中设置,如下图。如果要改变数据库中的默认字段的命名,则需要设置,如下图(第一行为开启时间戳,第二行关闭使用插入时间戳,第三行改变默认字段的命名)。当index.php中发生什么操作时,对应会在数据库中的字段中显示该操作的时间戳。
使用软删除:默认字段为delete_time,当使用软删除时需要在模型文件中设置
当在index.php中执行删除操作时,如下
数据库中的四条数据被删除一条,即delete_time有值了,表示该数据已经被软删除了(数据库中四条数据没变,但delete_time原先为null,表示没删除,有值即表示删除了,此即为软删除),也不能获取到这条数据了,如果想要获取这条数据则需:
如果要获取垃圾箱中的值,则
如果真正要删除数据