tp5和tp3.2的区别

万变不离其宗,tp5和tp3.2虽说是差别很大,但是套路大家都懂得。只要我们了解了他们的区别,再去学tp5,岂不是如鱼得水。

好,那我们来了解一下tp5和tp3.2的区别。

1,入口文件的绑定

我们都知道thinkphp是一个单入口框架,它所有的请求都通过public/index.php进入,如果我们正常情况下,我们默认访问的是index模块下的Index控制器下的index方法,如果我们现在想访问index.php或者是我们在这个地方再新建一个其它的文件,我们能不能将这个文件,直接绑定到某个模块?

我们在入口文件(public/index.php)中添加如下代码(注意顺序一定是这样的),他就会通过index.php,自动访问home模块

// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 绑定到index模块
define('BIND_MODULE','home');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

如果我的网站开发给第三方,那么我肯定不期望第三方访问我的index模块和admin模块,这样我们只需要在index.php入口文件的同级建一个api.php,然后在api.php中绑定api模块,这样我们访问public/api.php直接访问api模块,别的模块访问不了。

此外,在thinkphp/convention.php中有一个 ‘auto_bind_module’,我们把它改成true,开启了入口文件自动绑定,也可以实现同样的操作

2.URL和路由的变化

thinkphp/convention.php找到url_route_on和url_route_must,是配置路由是否开启和是否强制使用路由。

我们使用默认配置,然后找到public/route.php文件

return [
    'test/:id'      => 'index/test'
];

配置好路由,就可以通过指定路由访问。

3.请求对象Request和响应对象Response

5.0新增了请求对象Request和响应对象Response,Request统一处理请求和获取请求信息,Response对象负责输出客户端或者浏览器响应。

tp5中我们有三种方法可以让我们获得Request对象

1,框架提供的一个助手函数request()

2,是通过think下的Request类来获取它的实例

3,直接注入Request对象

具体获取参数方法如下:

<?php 
namespace api\index\controller; 
use think\Request; 
class Index 
{ 
  public function index(Request $request) 
  { 
    # 获取浏览器输入框的值 
    dump($request->domain()); 
    dump($request->pathinfo()); 
    dump($request->path()); 
      
    # 请求类型 
    dump($request->method()); 
    dump($request->isGet()); 
    dump($request->isPost()); 
    dump($request->isAjax()); 
      
    # 请求的参数 
    dump($request->get()); 
    dump($request->param()); 
    dump($request->post()); 
    //session('name', 'onestopweb'); 
    //cookie('email', 'onestopweb@163.com'); 
    //session(null); 
    //cookie('email',null); 
    dump($request->session()); 
    dump($request->cookie()); 
      
    dump($request->param('type')); 
    dump($request->cookie('email')); 
      
    # 获取模块 控制器 操作 
    dump($request->module()); 
    dump($request->controller()); 
    dump($request->action()); 
      
    # 获取URL 
    dump($request->url()); 
    dump($request->baseUrl()); 
  } 
} 

4,数据库操作

tp5.0助手函数废除了单字母函数,改用助手函数

M->db

调用数据表:

M('User')->where(['name'=>'thinkphp'])->find();(3.2)

db('User')->where('name'=>'thinkphp')->find();(5.0)

D->model

实例化模型的使用:

D('User')->where(['name'=>'thinkphp'])->find();

model('User')->where(['name'=>'thinkphp'])->find();

//或者
$UserModel =new User();

$UserModel->where(['name'=>'thinkphp'])->find();

U->url

IS_Get->Request::instance()->isGet();

IS_POST->Request::instance()->isPost();

I->input(代替)

5,在控制器中正确的输出模板

如果你继承think\Controller的话,可以使用:

return $this->fetch('index/hello');

如果你的控制器没有继承 think\Controller的话,使用:

return view('index/hello');

6.常量

5.0版本废弃了原来的大部分常量定义,仅仅保留了框架的路径常量定义,其余的常量可以使用App类或者Request类的相关属性或者方法来完成,或者自己重新定义需要的常量。
废除的常量包括:
REQUEST_METHOD、IS_GET IS_POST、IS_PUT、IS_DELETE、IS_AJAX __EXT__、COMMON_MODULE 、MODULE_NAME、CONTROLLER_NAME、ACTION_NAME、APP_NAMESPACE、APP_DEBUG、MODULE_PATH

当然一些常用的常量可以自己定义,如定义路径常量

在application/config.php,或者在模块下新建一个config.php。

return [
	'view_replace_str' =>[
		'__HOME__' => '/static/home',
	]
];

我们还是可以方便的引入和替换一些css,js 文件

7.模板继承

模板继承是一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

因此,模板继承的优势其实是设计基础模板中的区块(block)和子模板中替换这些区块。

每个区块由{block} {/block}标签组成。 下面就是基础模板中的一个典型的区块设计(用于设计网站标题):

{block name="title"}<title>网站标题</title>{/block}

block标签必须指定name属性来标识当前区块的名称,这个标识在当前模板中应该是唯一的,block标签中可以包含任何模板内容,包括其他标签和变量,例如:

{block name="title"}<title>{$web_title}</title>{/block}

你甚至还可以在区块中加载外部文件:

{block name="include"}{include file="Public:header" /}{/block}

一个模板中可以定义任意多个名称标识不重复的区块,例如下面定义了一个base.html基础模板:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{block name="title"}标题{/block}</title>
</head>
<body>
{block name="menu"}菜单{/block}
{block name="left"}左边分栏{/block}
{block name="main"}主内容{/block}
{block name="right"}右边分栏{/block}
{block name="footer"}底部{/block}
</body>
</html>

然后我们在子模板(其实是当前操作的入口模板)中使用继承:

{extend name="base" /}
{block name="title"}{$title}{/block}
{block name="menu"}
<a href="/" >首页</a>
<a href="/info/" >资讯</a>
<a href="/bbs/" >论坛</a>
{/block}
{block name="left"}{/block}
{block name="main"}
{volist name="list" id="vo"}
<a href="/new/{$vo.id}">{$vo.title}</a><br/>
 {$vo.content}
{/volist}
{/block}
{block name="right"}
 最新资讯:
{volist name="news" id="new"}
<a href="/new/{$new.id}">{$new.title}</a><br/>
{/volist}
{/block}
{block name="footer"}
{__block__}
 @ThinkPHP 版权所有
{/block}

上例中,我们可以看到在子模板中使用了extend标签来继承了base模板

8,标签

tp5.0标签默认使用{ },3.2是< >,变量输出使用普通标签就足够了,但是要完成其他的控制、循环和判断功能,就需要借助模板引擎的标签库功能了,系统内置标签库的所有标签无需引入标签库即可直接使用。

内置标签包括:

标签名作用包含属性
include包含外部模板文件(闭合)file
load导入资源文件(闭合 包括js css import别名)file,href,type,value,basepath
volist循环数组数据输出name,id,offset,length,key,mod
foreach数组或对象遍历输出name,item,key
forFor循环数据输出name,from,to,before,step
switch分支判断输出name
case分支判断输出(必须和switch配套使用)value,break
default默认情况输出(闭合 必须和switch配套使用)
compare比较输出(包括eq neq lt gt egt elt heq nheq等别名)name,value,type
range范围判断输出(包括in notin between notbetween别名)name,value,type
present判断是否赋值name
notpresent判断是否尚未赋值name
empty判断数据是否为空name
notempty判断数据是否不为空name
defined判断常量是否定义name
notdefined判断常量是否未定义name
define常量定义(闭合)name,value
assign变量赋值(闭合)name,value
if条件判断输出condition
elseif条件判断输出(闭合 必须和if标签配套使用)condition
else条件不成立输出(闭合 可用于其他标签)
php使用php代码
  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值