1,框架目录介绍
Application:用于存放网站的文件夹
Public:存放网站的静态资源文件夹和各公共文件
Thinkphp:框架的核心代码文件
Vendor:框架依赖的功能包存放文件夹
2,命令的方式创建控制器
根目录:Php think make:controller 分组/控制器名称
3,命令方式创建分组
根目录:php think build
4,注册路由
Route::rule(名称,路由,方式GET/POST)
Route::get(名称,路由)
Route::post(名称,路由)
Route::any(名称,路由,[‘method’=>’get|post’])
5,视图的调用
$this->fetch()
1,数据库的配置
(配置文件的地址:application/database.php)
2,命令的方式创建模型:
根目录:Php think make:model 分组/模型名称
3,数据的基本操作
1)添加:
添加一条记录:save
添加多条记录:saveAll
只添加数据库中含有的字段:allowFiled(true)
如:$goods->allowField(true)->save($data)
$goods->saveall($data)
2)查询:
A)查询一条记录:get()/find()
如:
Goods::get(133)
$goods->where(条件)
->find()
B)查询多条记录:all()/select()
如:
Goods::all([133,224])
$goods -> where('goods_id','in',[133,224])
->select()
C) 查询字段:value()/column()
如:
查询一个字段:
Goods::where('goods_id',133)
->value('goods_name')
查询满足条件的全部数据的指定字段:
Goods::where('goods_id','>',100)
->column('goods_name','goods_number')
3)修改:
update(至少满足下面条件中的一个)
①设置一个where()方法
②给修改的数据里边有设置主键id值
如:
$goods -> where('goods_name',’like’, ‘xiao%’)
-> update(['goods_name' => 'thinkphp']);
4)删除:
a) 物理删除:delete()/destroy(主键id)
b) 逻辑删除:softDelete:只是更新了delete_time的值
- Trait:trait其实是解决php面向对象不能多继承问题的,是一个弥补
4,连贯操作
1)where的四种使用方式:
① 数组
where(['name'=>'think','status'=>'1'])
where name=think and status=1
② 表达式
where('id','>',1)
where('mail','like','%[email protected]')
where(['id'=>['>',1],'mail'=>['like','%[email protected]']])
where id>1 and mail like ‘%[email protected]’
③ 字符串
where('type=1 AND status=1')
④ 绑定参数
where('id>:id AND name LIKE :name ',
['id'=>0, 'name'=>'thinkphp%'])
whereOr()或条件查询
where('字段名','表达式','查询条件');
whereOr('字段名','表达式','查询条件');
例子:
$goods = new Goods();
$info = $goods -> where(‘goods_id’,’>’,100)
-> whereOr(‘goods_id’,’<’,50)
-> select();
2) field()限制被查询的字段
field('id,title,content') 普通字段
field(['id','title','content']) 数组方式
field('id,SUM(score)') 使用函数
例子:
Goods::field(‘goods_id,goods_name’)->select()
3) limit()限制条数
limit(3)
limit('3,10') //通过偏移量进行条数限制,第4到14条
limit(3,10)
Goods::field(‘goods_id’)->limit(3,5)->select()
4) order()排序
order('id desc')
order('id asc')
order('id desc,status')
Goods::order(‘id desc,status’)->select()
5) group()分组查询
Goods::field('goods_id,max(price)')
-> group('goods_brand')
-> select();
6) having()查询
Goods::field('goods_id,count(goods_id) cnt')
->group('goods_brand')
->having('cnt>200')
->select();
7) fetchSql(true/false) 直接获取sql语句不执行操作
true:获取sql语句
false:执行sql语句
curd(增、删、改、查)操作语句都可以获取对应的sql语句
Goods::field('mg_name,mg_pwd')->fetchSql(true)->select()
$m->fetchSql(true)->update(['mg_id'=>508,'mg_name'=>'think']);
Manager::fetchSql(true)->destroy(509);
$manager->fetchSql(true)->saveAll($data);
$manager->fetchSql(true)->save($data);
8) alias()给数据表起别名,有两种方式使用
① alias('m') 给当前数据表起别名
② alias(['sp_role __ROLE__'=>'r','__MANAGER__'=>'m']);
表名要设置为大写的,并且前后有两个”_下划线”
__ROLE__会关联sp_role表,假定sp_是表前缀
__MANAGER__会关联sp_manager表
又比如__USER_TYPE__会关联sp_user_type表
Manager::alias('m')
->join('__ROLE__ r','m.role_id=r.role_id')
->field('m.mg_name,r.role_name')
->select();
Manager::alias(['__ROLE__'=>'r','__MANAGER__'=>'m'])
->join('__ROLE__','m.role_id=r.role_id')
->field('m.mg_name,r.role_name')
->select();
9) join() 连表查询
join(表名 别名,连表条件,类型)
类型:INNER,LEFT,RIGHT,FULL(mysql不支持)
select g.*,b.brand_name
from sp_goods as g
join sp_brand as b
on g.brand_id=b.brand_id
1,模板的使用
1)给模板传递数据:
1)方式
$this -> assign(变量在模版中的使用名称,被传递的数据);(和smartymuban的应用相似)
2)方式
return $this -> fetch(‘模版名称’,数组信息);
return $this -> fetch(‘模版名称’,[‘info’=>$info,’name’=>’jim’]);
如果模版名称为空,需要有“占位符”,具体如下
return $this -> fetch(‘’,[‘info’=>$info,’name’=>’jim’]);
3)方式
$info = xxx;
$name = yyy;
return $this -> fetch(‘’,compact(‘info’,’name’));
compact使用()
建立一个数组,包括变量名和它们的值
$city = “北京”;
$people = “2000万”;
$weather = “sunshine”;
$arr = compact(‘city’,’people’,’weather’);
print_r($arr);
//[‘city’=>’北京’,’people’=>’2000万’,’weather’=>’sunshine’]
2)数据的输出
1)普通变量:{$name}
2)数组:{$arr.name} {$arr[‘name’]}
3)对象:{$obj.name} {$obj:name} {$obj->name}
2,遍历数据
① {foreach $info as $val}
② {volist name="info" id="val"}
volist标签里边还可以支持的属性:
offset :偏移量,从第n条开始显示(条数基数从0开始),需要通过””双引号定义信息
length: 一共显示多少条
key:显示数据序号
empty:数据为空时的提示信息
mod:取模,当前记录的序号对mod取模后的信息,需要通过””双引号定义信息
3,收集数据
request()->param():收集所有类型的数据
request()->post():收集post方式提交的信息
Svae():添加数据
allowField(true):去除数据库不存在的数据
4,ajax无刷新方式
evt.preventDefault():阻止当前对象的默认动作
$(this).serialize():序列化当前表单的对象
parent.window.location.href=parent.window.location.href:刷新父界面
layer_close():关闭layer弹窗
5,制作超链接
{:url('分组/控制器/操作方法',[参数=>值,参数=>值])}
6,Request对象的使用
1,创建对象
request()
Request::instance()
function 方法(Request $request)
$this->request
2,收集数据
request()->get()
request()->post()
request()->param()
3,判断请求类型
request()->isAjax()
request()->isGet()
request()->isPost()
4,获得系统升级
request()->session
request()->action()
request()->controller()
request()->module()
1,依赖注入
class Goods extends Model
{
//在模型中声明invoke方法及对应内容
public static function invoke(Request $request)
{
$id = $request->param('goods_id');
return self::get($id);
}
}
控制器方法中,设置上述模型的对象,就会自动绑定上数据模型
public function upd(Goods $goods)
2,命名空间
命名空间的作用范围:
① 一个文件中只有一个namespace,这个空间的作用范围就是从namespace开始到文件的结束
② 一个文件中有多个namespace,每个空间的作用范围是从自己的namespace开始下遇到下个namespace到来之前
③ 文件彼此包含include,被包含文件的命名空间 对 包含文件不造成任何 命名空间作用范围的影响
空间元素的三种访问方式
① 完全限定名称
② 限定名称
③ 非限定名称
空间引入
use 空间\空间\空间\空间;
use 空间\空间\空间\类名;
use 空间\空间\空间\元素 as 别名;
访问公共空间的元素统一设置为: \元素
建议:访问公共空间元素都要通过”\元素”的方式进行,好处代码可读性高
注意:
文件的第1个namespace关键字前边不能有任何非注释代码
ü 通过“非限定名称”方式访问一个函数或常量元素首先会在本身空间获得,如果没有再去公共空间获取
ü 通过“非限定名称”访问访问一个类元素 ,则本身空间必须存在该类,否则报错