1.目录结构

2.路由

3..控制器

4.模型写法

5.视图标签

6.数据库操作

7.表单验证

8.分页

---------------------------

1.目录结构

project  应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

2.路由(路由的写法 https://www.kancloud.cn/manual/thinkphp5/118029   )

Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)');

例子

Route::rule('new/:id','News/update','POST');
'test' =>'index/index/show'

加了路由之后控制器可以用url()方法获取路由

echo url('index/index/show');

也就是说,不管test怎么变,只要控制器正确,返回的就是route定义数组的别名.

3.控制器

  3.1)控制器之request对象   

    public function show(Request $request)
{
var_dump($request);
var_dump(\request());
Request::instance();
}

其中的常用方法

        //thinkphp\library\think\Request.php 基本所有方法

        $request->domain();//返回域名
$request->pathinfo();
$request->path();
$request->method();
$request->isGet();
$request->isAjax();
$request->get();//获取get参数 不包含pathinfo变量
$request->param();//pathinfo值和get都传递过来
$request->post();//post值 session('key','value');//开启session 配置文件中开启
$request->session();//session值
cookie('key1','value1');
$request->cookie();
$request->cookie('key1'); $request->param('key1');//页可以直接获取value1 $request->module();//获取模块
$request->controller();//获取控制器
$request->action();//获取操作点 $request->url();
$request->baseUrl();
$request->file();
        //input助手函数 thinkphp\helper.php
echo $request->param('name');
$p = 'param';
echo $request->$p('name');
echo input('name');//先去param,再找get post put session cookie server env path file ...
echo input('post.name',10);//去post值
echo input('session.name',10);//去session值

  3.2)控制器返回值

        //更改返回类型
//可以动态的切换控制器的返回类型 -也可以不设置
config::Set('default_return_type','xml');//返回值是xml json 返回值自动转换
//也可以
$data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
    return $data;
// 指定json数据输出
return json(['data'=>$data,'code'=>1,'message'=>'操作完成']);
// 指定xml数据输出
return xml(['data'=>$data,'code'=>1,'message'=>'操作完成']);

5.视图 (参考  https://www.kancloud.cn/manual/thinkphp5/118048   )页面引入资源文件(__STATIC__/)

https://www.kancloud.cn/manual/thinkphp5/118120

  5.1)渲染模板

namespace app\index\controller;

use think\View;

class Index
{
public function index()
{
$view = new View();
return $view->fetch('index');
}
}

  5.2)或者直接使用view助手函数渲染模板输出,例如:

namespace app\index\controller;

class Index
{
public function index()
{
return view('index');
}
}

  5.3)如果继承了think\Controller类的话,可以直接调用think\Viewthink\Request类的方法,例如:

namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
public function index()
{
// 获取包含域名的完整URL地址
$this->assign('domain',$this->request->url(true));
return $this->fetch('index');
}
}

视图实例化渲染:https://www.kancloud.cn/manual/thinkphp5/118113

  5.4)thinkphp模板中的常量 (有些已经失效可以自己定义)

<link rel="stylesheet" href="__STATIC__/layui/css/layui.css">  //<link rel="stylesheet" href="/public/static/layui/css/layui.css">
默认的模板替换规则:
../Public : 会被替换成当前项目的公共模板目录 通常是 / 项目目录 /Tpl/default/Public/
__PUBLIC__ :会被替换成当前网站的公共目录 通常是 /Public/
__TMPL__ : 会替换成项目的模板目录 通常是 / 项目目录 /Tpl/default/
__ROOT__ : 会替换成当前网站的地址(不含域名)
__APP__ : 会替换成当前项目的 URL 地址 (不含域名)
__URL__ : 会替换成当前模块的 URL 地址(不含域名)
__ACTION__ :会替换成当前操作的 URL 地址 (不含域名)
__SELF__ : 会替换成当前的页面 URL

还可以通过在项目配置文件中配置TMPL_PARSE_STRING的值来自定义替换规则,如:

TMPL_PARSE_STRING => array(
'__PUBLIC__' => '/Common' , // 更改默认的 __PUBLIC__ 替换规则
'__UPLOAD__' => '/Public/Uploads/' , // 增加新的上传路径替换规则
)

示例:

文件路径:/Home/Tpl/default/User/index.html,代码如下:

<p>__ROOT__代表当前网站的网址</p>
<p>__URL__代表当前模块的URL地址/index.php/User</p>
<p>../Public代表/aoli/Tpl/default/Public</p>
<p>__PUBLIC__代表项目公共文件目录/Public</p>
<p>__TMPL__代表当前项目的模板目录/aoli/Tpl/default/</p>
<p>__APP__代表当前项目的入口文件地址/index.php</p>
<p>__ACTION__代表当前的操作地址/index.php/User/index</p>
<p>__SELF__代表当前URL地址/index.php/User/</p>
<p>__UPLOAD__</p>
<form action="__URL__/add" method="post">
<input type="text" name="username" />
<input type="submit" value="注册" />
</form>

http://www.jb51.net/article/54217.htm

http://www.thinkphp.cn/topic/8617.html

4.模型

6.数据库 ( https://www.kancloud.cn/manual/thinkphp5/118058  )

  6.1)基本使用

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);

  6.2)查询构造器

Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();

使用Query对象或闭包查询

或者使用查询对象进行查询,例如:

$query = new \think\db\Query();
$query->table('think_user')->where('status',1);
Db::find($query);
Db::select($query);

或者直接使用闭包函数查询,例如:

Db::select(function($query){
$query->table('think_user')->where('status',1);
});

添加一条数据

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);

添加多条数据

$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);

更新数据表中的数据

Db::table('think_user')
->where('id', 1)
->update([
'login_time' => ['exp','now()'],
'login_times' => ['exp','login_times+1'],
]);

更新某个字段的值:

Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');

删除数据表中的数据

// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]); // 条件删除
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();

混合查询

$result = Db::table('think_user')->where(function ($query) {
$query->where('id', 1)->whereor('id', 2);
})->whereOr(function ($query) {
$query->where('name', 'like', 'think')->whereOr('name', 'like', 'thinkphp');
})->select();

查询用到的语法: https://www.kancloud.cn/manual/thinkphp5/135182

事务操作

https://www.kancloud.cn/manual/thinkphp5/139063

// 启动事务
Db::startTrans();
try{
Db::table('think_user')->find(1);
Db::table('think_user')->delete(1);
// 提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}

7.表单验证

8.分页

一个带条件分页

        $where = [];
// 查询条件
$keyword = input('keywords');
if($keyword){
$where['orderNumber|groupName'] = ['like',$keyword];//竖线是or的意思,可以看手册
}
// 查询
$list = Db::table("reportform")
->where($where)
->order('creatTime desc')
->paginate(15,false, ['query' => request()->param()]);
// 获取分页显示
$page = $list->render();

9.thinkphp的文件处理类

转:https://www.kancloud.cn/manual/thinkphp5

tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)的更多相关文章

  1. laravel中及其常用的一些函数方法(自己看)和技巧(不断添加中)

    手册:https://laravelacademy.org/ 1.中间件的定义Middleware 2.路由的定义和写法 3.控制器Controller之Request 4.控制器Controller ...

  2. ***ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法

    thinkPHP中M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法 ...

  3. iOS开发小技巧 - UILabel添加中划线

    iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...

  4. eclipse中跳转到其它函数方法后如何快速返回原处

    快捷键 ctrl + 鼠标左键:跳转到引用的方法 alt + left :从所跳转到引用的方法返回原方法 alt + right:从原处返回到引用的方法

  5. 第三期 行为规划——11.在C ++中实现第二个成本函数

    在大多数情况下,单一成本函数不足以产生复杂的车辆行为.在这个测验中,我们希望您在C ++中实现更多的成本函数.我们稍后会在本课中使用这两个C ++成本函数.这个测验的目标是创建一个成本函数,使车辆在最 ...

  6. Java实战之02Hibernate-03Session中的常用方法

    九.Session中的常用方法 1.save方法 都是临时态————>持久态 2.persist方法 作用: 持久化临时态对象. 与save方法的区别: 开始了事务:persist和save没有 ...

  7. PHP程序中的文件锁、互斥锁、读写锁使用技巧解析

    文件锁全名叫 advisory file lock, 书中有提及. 这类锁比较常见,例如 mysql, php-fpm 启动之后都会有一个pid文件记录了进程id,这个文件就是文件锁. 这个锁可以防止 ...

  8. JQuery常用函数方法全集

    Attribute: $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img").attr({src:"test ...

  9. 在.net中读写config文件的各种方法

    阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...

随机推荐

  1. 多媒体开发(8):调试FFmpeg

    编译FFmpeg得到二进制文件,之后就是对二进制库的调用,这时FFmpeg就像一个黑盒子.作为程序员,难道不想研究一下FFmpeg的具体实现?比如是怎么拿到歌曲信息的.怎么解码的.怎么推流的,等等. ...

  2. NIO编程---通道(Channel)

    **版权声明:本文为小斑马伟原创文章,转载请注明出处! 通道(Channel):由java.nio.channels 包定义的.Channel 表示IO 源与目标打开的连接.Channel 类似于传统 ...

  3. (Zero XOR Subset)-less-线性基

    (Zero XOR Subset)-less 题意 :把n个数分成多个集合,要求 不能有集合为空,最终不能有非空子集合异或值为0,尽可能划分的多一些. 思路 :非法情况就只有 n个数异或 为0,其他的 ...

  4. PAT (Advanced Level) Practise 1002 解题报告

    GitHub markdownPDF 问题描述 解题思路 代码 提交记录 问题描述 A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 ...

  5. 网络篇:linux下select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪 ...

  6. Android应用程序开发疑问

    为什么android.util.log会提供五种不同级别的打印输出方式?(打印输出在Logcat窗口)比如:Log.v()用于打印比较琐碎的信息:Log.d()用于打印调试信息:Log.i()用于打印 ...

  7. [CSAcademy]Virus on a Tree

    [CSAcademy]Virus on a Tree 题目大意: 给你一棵\(n(n\le10^5)\)个点的树,一开始点\(1\)有病毒,可以沿着边扩散.你可以事先切掉若干条边,使得病毒扩散不超过\ ...

  8. 关于 win10启动错误 Error:16

    那个软件报这个错误,就打开属性 -- 兼容性 -- 打勾以管理员身份运行

  9. renren-vue 基于最新node10.8、npm6.2 在win7 x64系统 成功初始化启动

    renren-vue 基于最新node.npm初始化之路 renren-fast 是一个轻量级的 Spring Boot 快速开发平台,能快速开发项目并交付[接私活利器] 完善的 XSS 防范及脚本过 ...

  10. 护眼党必备良心app

    这几天用电脑用得厉害,眼睛经常感到疲劳,寻思着买个好点的蓝光眼镜.本来已经看上一个100+RMB的“高端”防蓝光眼镜,结果逛知乎发现了这两个app,能直接让电脑和手机屏幕过滤掉蓝光从而有效缓解视觉疲劳 ...