🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**Thinkphp5.1**是国内顶级的php框架之一,初学入坑必备 ## 通过composer安装TP5框架 ~~~ composer create-project topthink/think tp5 ~~~ ## URL解析 serverName/index.php/模块/控制器/操作/参数 模块在application文件夹下面 默认有index文件夹(模块为index) index模块下面有: 控制器 controller 文件夹 默认是 Index.php (首字母必须大写) 控制器里面有操作的方法 index() ``` public function index($id){ return $id; } ``` 方法里面带参数 $id 参数可以带默认值 ``` public function hello($name='laowang'){ return "hello" . $name; } ``` 访问URL必须带上参数名:name/xiaobai就能打印,如果没有默认则访问 hello xiaobai ## 模块设计 多模块设计: 所有模块命名空间以app作为根命名空间 ``` application module1 common.php 模块函数文件 config 配置目录(可选) controller 控制器(必须) model 模型(可选) view 视图(可选) ``` 如果只有一个模块时候,可以绑定这个模块: public/index.php追加方法: 绑定模块、控制器 test/index ``Container::get('app')->bind('test')->run->send(); `` 其他模块就无法访问 config目录下的app.php 可以设置空模块 'empty_module' => 'index' ***** 单模块设计: config目录下的app.php设置 'app_multi_module' => false; //支持多模块改为false 控制器+操作 在application下面可以不存在模块文件夹,直接写控制器 controller 环境变量Env 获取环境变量:应用目录 return Env::get('app_path'); ***** ## 控制器说明: ### 1,控制器定义 类名和文件名大小写保持一致,才用驼峰式命名,首字母大写 继承Controller基类,可以调用父类的方法,但不是必须的 假如命名有两个字母组成,例如HelloWorld,访问时候用_关联访问:hello_world config目录下的app.php配置文件可以关闭URL自动转换: 'url_convert'=>false; ***** 改变根命名空间方法:由app改成其他名称 Env全局配置 根目录添加.env文件 app_namespace=application ***** ### 2,控制器渲染输出 1,return ,相当于echo ,输出的是字符串 2, 使用json输出 ,json()函数 ``` $data= array('a'=>1,'b'=>2,'c'=>3); return json($data); ``` 3,view 输出模板 ``` public function abc(){ return view(); } ``` 要求在模块里面创建view文件夹, 里面对应建立相关控制器文件夹 (例如test), 里面建立相关方法名称(abc)的html文件 abc.html config目录下的app.php配置文件可以控制默认输出类型: 'default_return_type' => 'html'; 默认是html(文本) 'default_ajax_return_type' => 'json'; 一般来说,正常页面都是html输出,用于模板。AJAX默认为JSON 如果继承了基类控制器,可以定义控制器初始化方法:initialize(); //初始化,必须执行的方法 protected function initialize(){ //只支持输出(echo),不支持返回(return) echo "init"; } ***** ## 控制器操作 前置操作: 继承Controller类后可以设置一个$beforeActionList 属性来创建前置方法: //里面是写方法名 except是指定不调用哪个方法; only 是指定调用哪几个方法 ``` protected $beforeActionList= [ 'first', 'second'=>['except'=>'one'], 'third'=>['only'=>'one,two'], ]; protected function first(){ echo "first<br/>"; } ``` ***** 跳转和重定向 ``` protected $flag =false; public function index(){ if($this->flag){ //如果不指定URL ,则返回 $_SERVER['HTTP_REFEER'] this->success('注册成功','../'); }else{ this->error("失败"); } } ``` 跳转默认模板文件 thinkphp/tpl/dispatch_jump.tpl 'dispatch_success_tmpl' => Env::get('think_path'); ***** 空方法与空控制器(访问不存在时不报错) 默认空方法 ``` public function _empty($name){ return "此方法不存在" .$name; } ``` 默认空控制器 在controoler 里创建Error.php ``` class Error{ public function index(Request $request){ return "此控制器不存在".$request->controller(); } } ``` app.php配置文件修改默认空控制器 'empty_controller' => 'Error' ***** ## ## 数据库操作 配置文件在config/database.php ``` use think/Db; public function getNoModelData(){ //table需要加前缀 ; name不需要加前缀 //$data = Db::table('完整表名')->select(); $data = Db::name('表名')->select(); return json($data); } ``` ***** 定义Mopdel: 在模型里面新建 model 文件夹;并且创建与数据表名一致的php文件:User.php ``` namespace app\model; use think\Model; class user extends Model{ } ``` ***** 在控制器里面使用 ``` use app\index\model\User; public function getModelData(){ $data= User::select(); return json($data); } ``` ***** 建议调试时候打开Trace 配置文件app.php 'app_trace' = true; 右下角调试图标里面的SQL可以看到完整的sql语句 ***** ### 查询方法: 1. 查询一条数据: Db::name('表名')->find() 【LIMIT 1】 2. 查看最后执行sql: Db::getLastSql(); 3. 查询条件: Db::name('表名')->where('id',10)->find(); 5. 没有查询到值会返回null 6. 没有查询到数据时返回异常: Db::name('表名')->where('id',10)->findOrFail(); 7. 没有查询到数据时返回空数组: 8. Db::name('表名')->where('id',10)->findOrEmpty(); 10. 查询多条数据: Db::name('表名')->select() 11. 没有查询到数据时返回异常: 12. Db::name('表名')->where('id',10)->selectOrFail(); 14. 查询指定字段单个值:Db::name('表名')->where('id',10)->value('username'); 16. 查询指定列多个:Db::name('表名')->column('username'); 17. 指定id作为索引:Db::name('表名')->column('username','id'); ----------------------------------------------------- ### 新增insert() ``` $data=[ "name"=>"wang", "age"=>"32" ]; $flag = Db::name('表名')->insert($data); if($flag) return "success"; //获取新增的id return Db::insertGetId(); ``` ### 批量新增 insertAll() ### ``` $dataall=[ [ "name"=>"wang", "age"=>"32" ], [ "name"=>"li", "age"=>"27" ] ]; Db::name('表名')->insertAll($data); ``` ***** ### 修改 update() ### //批量修改 ``` $data=[ "name"=>"laowang" ]; $update= Db::name('表名')->where('id',10)->update($data); return $update; ``` 增值 inc() 参数1:字段名;参数2,数量 Db::name('表名')->inc('字段名',1)->where('id',10)->update($data); 减值 dec()参数1:字段名;参数2,数量 Db::name('表名')->dec('字段名',1)->where('id',10)->update($data); 字段使用mysql函数 exp() 参数1:字段名;参数2,方法 Db::name('表名')->exp('email','UPPER(email)')->where('id',10)->update($data); ### raw() 方法修改更新: ``` $data = [ 'name' => 'wang', 'email' => Db::raw('UPPER(email)'), 'price' => Db::raw('price - 3'), 'id' => 10 ]; Db::name('表名')->update($data); ``` //修改单个字段 setField() $update= Db::name('表名')->where('id',10)->setField('name','老王'); ***** ### 删除 delete() //删除单条 Db::name('表名')->delete(10); //删除多条 Db::name('表名')->delete([1,2,3,4]); //根据条件删除 Db::name('表名')->where('id',10)->delete(); //全部删除 Db::name('表名')->delete(true); ***** ### 比较查询 = 、<> 、 > 、 < 等于、不等于、大于、小于 Db::name('表名')->where('id','<>',10)->select(); ### ### 区间查询 like Db::name('表名')->where('name','like','wang%')->select(); 支持数组传递多个值: Db::name('表名')->where('name','like',['wang%','li%'],'or')->select(); select * from 表名 where('name' like 'wang% or 'name' like 'li%') ***** whereLike() Db::name('表名')->whereLike('name','wang%')->select(); whereNoLike() Db::name('表名')->whereNoLike('name','wang%')->select(); ***** between 区间段从多少到多少 Db::name('表名')->whereLike('id','between','19,25')->select(); Db::name('表名')->whereLike('id','between',[19,25])->select(); Db::name('表名')->wherebetween('id',[19,25])->select(); //区间段不在从多少到多少 Db::name('表名')->whereNotbetween('id',[19,25])->select(); ***** in 包含多少 Db::name('表名')->where('id','in','19,20,25'])->select(); Db::name('表名')->whereIn('id','19,20,25'])->select(); //不包含多少 Db::name('表名')->whereNotIn('id','in','19,20,25'])->select(); ***** null 查询为null的数据 参数:字段名 Db::name('表名')->where('uid','null')->select(); Db::name('表名')->whereNull('uid')->select(); notnull 查询不为null的数据 参数:字段名 Db::name('表名')->where('uid','not null')->select(); Db::name('表名')->whereNotNull('uid')->select(); ***** 自定义字段后的SQL exp Db::name('表名')->where('id','exp','In(1,2,3)')->select(); Db::name('表名')->whereExp('id','In(1,2,3)')->select(); ***** ### 时间查询 操作: >、<、 >=、 <= Db::name('表名')->where('create_time','> time','2019-01-01')->select(); Db::name('表名')->whereTime('create_time','>','2019-01-01')->select(); ***** ### ### 区间查询 Db::name('表名')->where('create_time','between time',['2019-01-01','2019-10-30'])->select(); Db::name('表名')->whereBetween('create_time',['2019-01-01','2019-10-30'])->select(); //查询可以当天 whereBetweenTime: 当天查询:一个参数; 区间查询: 两个参数 Db::name('表名')->whereBetweenTime('create_time','2019-01-01','2019-10-30')->select();