1、入口文件的更改,給api增加一個入口文件
2、URL和路由的更改
3、5.0增加請求對象Request和響應對象Response
4、數據庫操作更改,廢除單字母函數改用助手函授
5、廢除一些自定義常量
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
for For循環數據輸出 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代碼
