Thinkphp各个版本总结------终结版本!Thinkphp各个版本总结:tp3.2.3,tp5.0,tp5.1差异
终得闲暇时间(也就两三个⼩时)能够进⾏这6个⽉对tp框架的使⽤总结了:
1.框架隐藏模块差异:
tp3.2.3:其实还⽐较⿇烦
//隐藏⼊⼝⽂件
在与⼊⼝⽂件同级⽬录,将.htaccess⽂件中
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
修改为
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
//配置设置默认模块访问模块
‘DEFAULT_MODULE’=> 'Home'(Home为模块名称),
/
/隐藏模块,关闭多模块访问
‘MULTI_MODULE’=> false,
//改变URL模式为重写模式
'URL_MODEL' => 2,
(注意要隐藏哪个模块在哪个模块下的配置⽂件下配置,否则关闭多模块访问会出现其他模块不能被访问)
//在公共的配置⽂件配置,多模块访问
'MODULE_ALLOW_LIST' => array( '模块名称1','模块名称2','模块名称3'),
tp5:可以看见其中稳了隐藏url中的模块名我们需要进⾏设置的是⼀个BIND_MOULE常量
define('APP_PATH', __DIR__ . '/../application/');
define('BIND_MODULE','home');
// define('CONTROLLER_NAME',\think\Request::instance()->controller());
// 加载框架引导⽂件
require __DIR__ . '/../thinkphp/start.php';
tp5.1:隐藏模块名所需要的是利⽤Container中的链式⽅法进⾏bind⽅法中的绑定模块
namespace think;
// 加载基础⽂件
require __DIR__ . '/../thinkphp/base.php';
// ⽀持事先使⽤静态⽅法设置Request对象和Config对象
// 执⾏应⽤并响应(5.1在此⽤bind实现隐藏模块名)
Container::get('app')->bind('index')->run()->send();
2.模板主题的设置
思路是说⼿机端和电脑端在base的控制器中区别之后改变配置的模板路径
tp3.2.3(极为简单):此刻你的$this->display();路径就是对应的moule/view/m/ 下的路径了
if (is_mobile()) {
//设置默认主题为 m
C('DEFAULT_THEME','m');
}
tp5及以上:模板主题的思路是⾃动适配view的路径
//模板主题的切换(适配各个平台以及双端)
$theme = Env::get('module_path').'view/'.(get_platform()).'/'.(is_mobile()?'m/':'web/');
$this->view->config('view_path',$theme);
3.助⼿函数的升级(字母函数的升级)
tp3.2.3:很明显⼤家都知道有所谓的字母函数可以进⾏使⽤,但是其实好⽤归好⽤,违反了许多代码的规范和习惯tp5以上由于我公司统⼀优先级是助⼿函数优先所以我也发掘了⼀些助⼿函数的差异:
3.2版本 5.0版本
C config
E exception
G debug
L lang
T废除
I input
N废除
D model
M db
A controller
R action
B废除
U url
W widget
S cache
F废除
tp5.1以上:
助⼿函数描述
abort 中断执⾏并发送HTTP状态码
action 调⽤控制器类的操作
app 快速获取容器中的实例⽀持依赖注⼊
behavior 执⾏某个⾏为
bind 快速绑定对象实例
cache 缓存管理
call 调⽤反射执⾏callable ⽀持依赖注⼊
class_basename 获取类名(不包含命名空间)
class_uses_recursive 获取⼀个类⾥所有⽤到的trait
config 获取和设置配置参数
container 获取容器对象实例
controller 实例化控制器
cookie Cookie管理
db 实例化数据库类
debug 调试时间和内存占⽤
dump 浏览器友好的变量输出
env 获取环境变量(V5.1.3+)
exception 抛出异常处理
halt 变量调试输出并中断执⾏
input 获取输⼊数据⽀持默认值和过滤
json JSON数据输出
jsonp JSONP数据输出
lang 获取语⾔变量值
model 实例化Model
parse_name 字符串命名风格转换
redirect 重定向输出
request 实例化Request对象
response 实例化Response对象
route 注册路由规则(V5.1.3+)
session Session管理
token ⽣成表单令牌输出
trace 记录⽇志信息
trait_uses_recursive 获取⼀个trait⾥所有引⽤到的trait
url Url⽣成
validate 实例化验证器
view 渲染模板输出
widget 渲染输出Widget
xml XML数据输出
其中要重点说的是request()这个助⼿函数!:
tp3.2.3的CONTROLLER_NAME和ACTION_NAME在tp5以上都已经进⾏了废除tp5以上的获取⽅法:
requset()->controller();
request()->action();
当然别忘了在模板⾥⾯要
{:requset()->controller()}
{:requset()->action()}
当然还有的就是Request类的use:
tp5.0版本:
use think\Request;
tp5.1版本:
use think\facade\Env;
然后就是
Request::isAjax()
Request::isGet()
Request::isPost()...
助⼿函数:
request()->isGet()
request()->isPost()
request()->isAjax()
其中很多tp5.0只要use之后就能使⽤的类静态调⽤⽅式在tp5.1你发现不⾏
此时你需要查看⼿册中这个类是不是有facade,有得话就在think\后加上facade\,有的话你就加上去吧。
其中5.1某些版本中$_SERVER这类变量⽆法使⽤:此时就需要use think\facade\Request;就能够恢复使⽤。
4.⽬录结构得变化
tp3.2.3⼊⼝直接就在根⽬录当中,⽽tp5以上都在public这个⽂件夹当中
配置⽂件tp3.2.3分得不是那么详细:分为Common中的主配之以及各个模块中的分配置,配置冲突时分配置优先级⾼!
tp5.0:
tp5.1更为细化的配置:
配置当中5之后被分为各种配置不像3.2.3在同⼀个config.php⽂件当中。现在区分为app,cache,databases,template(模板)这⼏个配置;
不同于3.2.3当中的__PUBLIC__这些都被取消了,但是我们可以在配置template⽂件中进⾏设置:
// 视图输出字符串内容替换
'tpl_replace_string' => [
'__STATIC__'=>'/static/common/js',
//或者
// '__ADDONS__' =>'/static/'.(get_platform()).'/index/Addons',
'__IMG__' =>'/static/'.(get_platform()).'_'.(is_mobile()?'m':'pc').'/images',
'__CSS__' =>'/static/'.(get_platform()).'_'.(is_mobile()?'m':'pc').'/css',
'__JS__' =>'/static/'.(get_platform()).'_'.(is_mobile()?'m':'pc').'/js',
'__ROOT__'=> '',
'__UPLOADS__' => '/uploads',
'__PUBLIC__' => '/static/'.(get_platform()).'_'.(is_mobile()?'m':'pc'),
],
5.模板差异
a.标签开头和结尾<;和>改为{和}后会有很⼤的问题存在,问题在于{}我们也⽤来了调⽤助⼿函数以及输出⼀些变量数据等。例如⼀下的冲突情况:
{include file="Public/header" title="{$appInfo.title}_{:config('WEB_SITE_TITLE')}"
description="{$appInfo.description}" keywords="{$appInfo.keywords}" cate="哈哈"/}
其中模板规定了助⼿函数使⽤:
{:助⼿函数()}
但是我们的include内置标签的'{'会去他最近的⼀个'}',他到的是config这个助⼿函数的 "}"所以从description开始之后全部变为标签外的数据。
通常解决办法就是将助⼿函数的使⽤放置于C层当中,然后传变量进来。
包含⽂件之后可以通过以上的⽅式进⾏注⼊参数,然后被包含的⽂件就可以是这样⼦的:
<meta name="keywords" content="[keywords]">php实例手册
<meta name="description" content="[description]">
b.tp5.1之后的 if标签和foreach标签产⽣了改变
tp3.2.3以及tp5.0(依旧使⽤尖括号讲解)
<if condition="$times eq 1">
<foreach name='nav2' item='v'>
tp5.1:纯原⽣
<if (!empty($tempType)) && $tempType == "index" >
<foreach $ziwei['data'] as $k=>$v>
c.视图渲染
tp3.2.3:$this->display();这个相信⼤家都会⽤
tp5.0以上:
2.助⼿函数view的使⽤:
return view('hello', ['name' => 'thinkphp']);
d.
6.开发规范(报不到控制器,不到⽅法之类的错误,其实官⽅⼿册已经⾜够详细了,希望开发之前⾸先拜读⼀番!)
⽬录和⽂件
⽬录使⽤⼩写+下划线;
类库、函数⽂件统⼀以.php为后缀;
类的⽂件名均以命名空间定义,并且命名空间的路径和类库⽂件所在路径⼀致;
类⽂件采⽤驼峰法命名(⾸字母⼤写),其它⽂件采⽤⼩写+下划线命名;
类名和类⽂件名保持⼀致,统⼀采⽤驼峰法命名(⾸字母⼤写);
函数和类、属性命名
类的命名采⽤驼峰法(⾸字母⼤写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;
函数的命名使⽤⼩写字母和下划线(⼩写字母开头)的⽅式,例如 get_client_ip;
⽅法的命名使⽤驼峰法(⾸字母⼩写),例如 getUserName;
属性的命名使⽤驼峰法(⾸字母⼩写),例如 tableName、instance;
特例:以双下划线__打头的函数或⽅法作为魔术⽅法,例如 __call 和 __autoload;
7.⾃定义的类库vendor(类库载⼊)
tp3.2.3的路径是/ThinkPHP/Library/Vendor;然后引⽤的时候是直接采⽤助⼿函数vendor()进⾏使⽤
vendor('xunsearch.lib.XS');
$xs = new \XS('art');
tp5.0使⽤的是/vendor路径,但是采⽤的是import进⾏载⼊使⽤(我真的喜欢这种⽅法):
Loader::import('first.second.Foo');
$foo = new \Foo();
tp5.1使⽤的是/vendor路径,但是废除了import这⼀个神器,直接就是只能required去包含这个⽂件:
通常配合着env('vendor_path')去获取路径进⾏包含
use think\facade\Env;
// 设置⽀付请求订单参数
require_once(Env::get('extend_path') . 'linxun/paychannel/Alipay/wappay/buildermodel/AlipayTradeWapPayContentBuilder.php');
$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
当然可以采⽤助⼿函数env()
8.W函数 / widget函数的妙⽤
这个函数其实是⼀个⾮常好⽤的⼩玩意⼉,他可以在任何地⽅让你去调⽤相关逻辑层的东西,讲俗⼀点⼀个随时可以调⽤的C层⼀样的东西。
⾸先我们定义它:
namespace app\index\widget;
use think\Action;
use think\Controller;
/**
* 分类widget
* ⽤于动态调⽤分类信息
*/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论