thinkphp是一个MVC模式的框架,感觉和Java的MVC框架大同小异
thinphp5的安装
开发环境:
1、PHP版本>=5.4.0
2、需要依赖包:PDO、MbString、CURL、PHP Extension
3、Mysql 和 Apache或Nginx服务器
从官网下载最新的tp5安装包并解压,然后放入Apache网站目录www下面
调整服务器的根目录到www/tp5/public
访问localhost如果有:)说明安装成功
tp5目录结构和规范
application应用目录
application/index //index文件夹为一个index模块
application/index/controller //controller为index模块的控制层,就是MVC中的C
application/index/model //model为index模块的模型层,就是MVC中的M
application/index/view //model为index模块的展示层,就是MVC中的V
application/command.php //控制台配置文件,当我们用命令行执行tp5,就会读取command.php的配置
application/common.php //编写一些通用函数可以在所有模块中调用
application/config.php //应用配置文件,所有模块的通用配置文件
application/database.php //数据库配置文件
application/route.php //路由配置文件,对url的美化
application/tags.php //框架拓展配置文件
extend第三方类库
public入口文件夹
public/favicon.ico //网页图标
public/index.php //网站(整个应用)的入口文件
public/robots.text //搜索引擎爬虫文件,可以定义某些url可以被爬取,有些url不能被爬取
public/router.php //使用php内置的webserver来启动tp5
命令: php -s localhost:8888 router.php
浏览器中输入localhost:8888就可以访问tp5应用了
public/ststic //放置网站的静态文件,如css、js、img等
runtime网站运行中的缓存文件,日志、缓存、编译文件等等
thinkphp核心框架文件
thinkphp/base.php //定义的一些常量
thinkphp/convention.php //框架默认配置文件
thinkphp/helper.php //助手函数
thinkphp/lang //语言包
thinkphp/library //框架的核心
thinkphp/start.php //框架启动文件
thinkphp/tpl //默认模板
等等。。。😵
规范:
1、目录使用小写+下划线的方式命名
2、类库函数文件名均以.php结尾
3、类的文件名均以命名空间定义,且命名孔家岸和类库文件所在的路径一致
4、类文件采用驼峰首字母大写 其余文件为小写+下划线命名
5、类名和类文件名保持一致,采用驼峰命名 首字母大写
6、类采用驼峰命名 首字母大写不需要添加后缀
7、函数使用驼峰命名 首字母小写 如(getUserInfo)
8、属性名采用驼峰 首字母小写 如(tableName)
9、以双下划线__开头的函数或方法为魔术方法
10、常量以大写字母和下划线命名
11、配置参数以小写字母和下划线命名
12、数据库的表和字段采用小写+写划线的命名方式 不能以写划线开头
TP5的配置
1、惯例配置
在thinkphp/convention.php中直接修改默认配置
2、应用配置
在public/index.php中添加
//定义应用目录
define('CONF_PATH',DIR.'/../conf/');
再在根目录下新建文件夹conf并新建文件config.php
<?php
return[
// ' 配置内容'
//比如 'app_email'=>'asd123wto@163.com',
// 'app_debug'=>false //可直接修改原有配置内容
];
3、扩展配置
在./conf/下新建文件夹extra
在extra下新建要配置的key名.php
例如:database.php
<?php
return[
//数据库类型
'type'=>'mysql',
//数据库连接DSN配置
'dsn'=>'',
....
];
这样就可以拓展配置database
当然database可以直接在conf/下配置
4、场景配置
在conf/下新建home.php或者office.php(在家中的配置和在公司的配置)
在config.php中添加'app_status' => 'home'
就可以使用home中的配置,在公司改成'app_status' => 'office'就好了
5、模块配置
在conf/下新建与模块名一直的文件夹,此文件夹下新建config.php,该配置只对该模块生效
例如:conf/index/config.php只对application/index模块生效
在模块配置中可以扩展配置
6、动态配置
“在控制器中生效的配置”
在控制器中新建方法
public function __construct(){
config('','');
}
在助手函数config()中就可以添加动态配置,在此控制器中所有方法中生效
config()也可以直接写在需要的方法中,只在该方法生效
TP5的URL和路由
1、隐藏URL入口文件index.php
在Apache的配置文件apache.conf或httpd.conf中修改AllowOverride 为All,重启Apache
注意使用Apache的隐藏功能,则执行文件public/.htaccess规则
2、绑定入口文件
在public/index.php中填写
//绑定模块
define('BIND_MODULE','admin/index');
则入口文件绑定为admin模块下的index控制器,在浏览器直接输入localhost则显示admin下的index控制器
注:写第三方接口时:需建立public/api.php
<?php
define("APP_PATH",__DIR__.'/../app/');
define("CONF_PATH",__DIR__.'/../conf/');
define("BIND_MODULE",'api');
require(__DIR__.'/../thinkphp/start.php');
这样别人在使用的时候只能访问api模块下的内容
3、路由
在conf/下新建route.php
<?php
return[
'news/:id'=>'index/index/info'
];
会将id的值传给index模块下的index控制器下的info方法
原来访问是/index/index/info/5 现在可以访问/news/5.html
TP5的视图和模板
1、视图view
在控制器中直接return view();则获取的是当前模块下的view/index/index.html
如果在view()传递第一个参数,是修改模板文件目录的 。 比如:return view('upload');则路径为当前模块下view/index/upload.html
如果传入view('public/upload'); 则路径为view/public/upload.html
如果传入view('./index.html'); 则路径为入口文件index.php同级目录下的index.html "./"开头表示public目录
如果在view()传入第二个参数,第二个参数为一个数组。 比如:
return view('index',[
'email'=>'asd123wto@163.com'
]);
则就可以在index.html中书写{$email}获取到"asd123wto@163.com"
如果在view()传递第三个参数,第三个参数也为一个数组。 比如:
return view('index',[
'email'=>'asd123wto@163.com'
],[
'STATIC'=>'当前是static的替换内容'
]);
就可以在index.html中直接书写STATIC就能得到它所对应的值"当前是static的替换内容"
当我们控制器继承了Conteroller就可以使用助手函数fetch()
return $this->fetch('public/upload');
它的用法和view()是一样的;
fetch()方法还有一个兄弟方法assign()专门用来传值,比如:
$this->assign('email','asd123wto@163.com');
return $this->fetch();
在index.html中就可以用{$email}取值
display()方法是传一个字符串,进行模板替换和字符串输出,第二个参数也可以传值,同样也可以使用assign()
2、变量输出、赋值替换
赋值除了view()、assign()、fetch()外还有:
$this->view->key='value';
View::share('key','value');
当然这两种和assign()要在fetch()跳转之前实现
替换除了view()和fetch()的替换,还有配置文件的替换
在config下配置
'view_replace_str'=>[
'__123__'=>'一二三'
]
在html中输入__123__就会得到一二三
3、系统变量原生标签
使用Think就可以调用tp的原生变量
例如:
{$Think.cookis.key}就能获取cookie里key的值
{$Think.session.key}就能获取session里key的值
{$Think.get.id}就能获取get里id的值
{$Think.APP_PATH}就能获取APP_PATH的常量的值
等等等等。。。😵
4、变量输出 调节器
传入一个email,可以在视图层
{$email|md5} //获取md5加密后的email变量
{$email|md5|strtoupper} //大写md5加密
{$email|substr=0,8} //获取semail的前8位
{$time|date="Y-m-d",###} //把time时间戳转化成年月日
当没有email传入时
{$email|default="asd123wto@163.com"} //就会显示默认值“asd123wto@163.com”
当视图层输入
{literal}
{$email}
{/literal}
则输出{$email}不会被替换
5、模板循环标签
控制层向视图层传入一个数组list,在视图层就可以用以下方法遍历
1、{volist name="list" id="vo"}
<p>{$vo.key}</p>
{/volist}
{volist}里的参数
offset="2" //就会从第二条记录开始遍历
length="1" //指定的遍历长度
mod="2" //当前循环的次数取余并可以{$mod}显示
empty="这里没有数组" //当没有数组时,就会输出empty里的字段
key="s" //当前循环的次数{$s}显示
2、{foreach $list as $vo}或者{foreach name="list" item="vo"}
<p>{$vo.key}</p>
<p>{$key}</p> //输出数组下标
{/foreach}
3、{for start="1" end="10"}
<p>{$i}</p> //取得1-10
{/for}
{for start="1" end="10" step=2}
{$i} //step会使每次i+=2,得到1、3、5、7、9
{/for}
6、比较标签
传入$a变量
//{eq}判断a与10是否相等
{eq name="a" value="10"}
<p>相等</p>
{else/}
<p>不相等</p>
{/eq}
//以此类推
//判断是否不相等
//判断是否大于
//判断是否小于
//判断是否大于等于
//判断是否小于等于
//注:name中使用变量不用$;value中使用变量需要加上$
7、条件判断标签
1、switch 传入$a
{switch name="a"}
{case value="1"}
<p>name="1"</p>
{/case}
{case value="2'}
<p>name="2"</p>
{/case}
{default/}
<p>默认值</p>
{/switch}
2、range 传入$a
{range name="a" value="1,2,3" type="in"} //type="in","notin","between","notbetween"
<p>当前a是1、2、3中的一个</p> //当type="butween" 则value的值为在两个数之间
{else/}
不是
{/range}
等于
{in name="a" value="1、2、3"}
{else/}
{/in}
3、defined 判断常量是否定义
{defined name="APP_PATH"}
{else/}
{/defined}
4、if判断
{if condition="($Think.get.level==1) AND ($Think.get.id==10)"} //AND,OR
{else/}
{/if}
😴终于整理完了