標籤:記錄 use 傳遞 請求 exec 字元 compose model ret
一.安裝
1.使用git或者composer(composer update)進行即時更新,區別在於git不會清空核心架構目錄而composer會清空。
2.使用官網打包好的TP壓縮包(解壓即可用)->不是即時更新更新
3.國內的碼雲和Coding代碼託管平台都有ThinkPHP5的鏡像
============================================================================================================
二.目錄結構
命令列:php think build --module demo
tp5(ROOT_PATH)
├─application(APP_PATH) 應用目錄
│ ├─index 模組目錄(可更改)
│ │ ├─config.php 模組設定檔
│ │ ├─common.php 模組公用檔案
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 視圖目錄
│ │ └─validate 驗證目錄
│ ├─demo 模組目錄(可更改)
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 視圖目錄
│ │ ├─config.php 模組設定檔
│ │ └─common.php 模組公用檔案
│ ├─command.php 命令列工具設定檔
│ ├─common.php 應用公用檔案
│ ├─config.php 應用設定檔
│ ├─tags.php 應用行為擴充定義檔案
│ ├─database.php 資料庫設定檔
│ └─route.php 路由設定檔
├─extend 擴充類庫目錄(可定義)
├─public 網站對外訪問目錄
│ ├─index.php 應用入口檔案
│ └─static 靜態資源目錄
│ ├─css 樣式目錄
│ ├─js 指令碼目錄
│ └─img 映像目錄
├─runtime 運行時目錄(可定義)
├─vendor 第三方類庫目錄(Composer)
├─thinkphp(THINK_PATH) 架構系統目錄
│ ├─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 命令列工具入口
目錄和檔案
目錄使用小寫+底線;
類庫、函數檔案統一以 .php 為尾碼;
類的檔案名稱均以命名空間定義,並且命名空間的路徑和類庫檔案所在路徑一致;
類檔案採用駝峰法命名(首字母大寫),其它檔案採用小寫+底線命名;
類名和類檔案名稱保持一致,統一採用駝峰法命名(首字母大寫)
=========================================================================================================================
三.控制器
1.URL不區分大小寫。
2.控制器類可包括多個操作方法,但是protected、private類型無法直接通過URL訪問(public 類型才可通過URL訪問)
四.視圖
1.存放模板檔案(hello.php)。
2.Index控制器類繼承了think\Controller類之後,我們可以直接使用封裝好的assign和fetch方法進行模板變數賦值和渲染輸出。
fetch方法中我們沒有指定任何模板,所以按照系統預設的規則(視圖目錄/控制器/操作方法)輸出了view/index/hello.html模板檔案。
總結:
use think\Controller;=>class Index extends \think\Controller
===========================================================================================================================
URL:
1.入口檔案可以隱藏。(public/index.php)
2.方法名自動轉化成小寫。
3.方法中進行傳參,通過url中參數值進行模板中返回。
完整路由:http://tp5.com/入口檔案/模組名/控制器名/方法名/參數名/參數值
完整路由:http://tp5.com/index.php/index/index/hello/res/thinkphp
*如果 public function hello($res=‘ World‘)中進行了指定預設值,參數可進行忽略。
定義name(參數可選):http://tp5.com/index.php/index/inedx/hello
*修改設定檔url_param_type=1按照順序擷取可多參數傳遞。http://localhost/tp5/public/index.php?s=index/index_test/hello/res/a
public function hello($res=‘‘,$data=‘‘){
if(!empty($res)){
return ‘Hello,‘.$res.‘!‘.$data;
}else{
return ‘Hello, World !!!‘;
}
}
輸出結果:Hello,res!a
4.命名:駝峰式命名HelloWorld=>hello_world(如果支援嚴格區分大小寫並支援駝峰法進行控制器訪問修改設定檔url_convert)。
*修改設定檔url_convert後嚴格要求控制器類名。
*pathifo方式:http://localhost/tp5/public/index.php/index/index_test/hello/res
*相容方式 :http://localhost/tp5/public/index.php?s=index/index_test/hello/res
路由簡化:
*路由簡化在我的理解上一個是節省了url的長度,方便記憶和查看;一個是因為使用自訂路由,能防止惡意請求,對於網站的安全有協助。
route.php:‘hello‘=> ‘index/IndexTest/hello‘,
use think\Route;
Route::rule(‘hello‘,‘index/IndexTest/hello‘);-->http://localhost/tp5/public/hello/a/b
http://localhost/tp5/public/res/a/b
輸出結果:Hello,a!b
*使$res變成選擇性參數:‘hello/[:res]‘=> ‘index/IndexTest/hello‘,
*使用route起別名時程式限制性return中的資料。
亦可使用閉包定義路由
return[
‘hello‘=> function($res=‘‘,$data=‘‘){
if(!empty($res) || !empty($data)){
return ‘Hello,‘.$res.‘!!! ------‘.$data;
}else{
return ‘Hello, World !!!‘;
}
},
];
Route::rule(‘hello‘,function($res=‘‘,$data=‘‘){
if(!empty($res) || !empty($data)){
return ‘Hello,‘.$res.‘!!! ------‘.$data;
}else{
return ‘Hello, World !!!‘;
}
});
*可使用別名進行url的規則約束,比如定義請求方式,定義尾碼名。
===================================================================================================
五。資料庫操作
原生:
$result = Db::execute(‘insert into think_data (id, name ,status) values (5, "thinkphp",1)‘);
$result = Db::query(‘select * from think_data where id = 5‘);
(原則上,讀操作都使用query方法,寫操作使用execute方法即可)
$result = Db::connect(‘db1‘)->query(‘select * from think_data where id = 1‘);
鏈式:
$list = Db::name(‘data‘)
->where(‘status‘, 1)
->field(‘id,name‘)
->order(‘id‘, ‘desc‘)
->limit(10)
->select();
*對於事務的支援,最簡單的方法就是使用transaction方法,只需要把需要執行的事務操作封裝到閉包裡面即可自動完成事務
====================================================================================================
六、資料顯示
1.foreach標籤
foreach標籤用於迴圈輸出:
foreach(name,item,key)
name(必須):要輸出的資料範本變數
item(必須):迴圈單原變數
key(可選):迴圈的key變數,預設值為key
樣本:
<foreach name=‘list‘ item=‘vo‘>
{$vo.id}
{$vo.name}
</foreach>
foreach標籤相對於volist標籤簡潔,沒有volist標籤那麼多功能。優勢是可以對對象進行遍曆輸出,而volist標籤通常是用於輸出數組。
--------------------------------------------------------------------------------------------------------------------------------
2.volist標籤
volist標籤主要用於在模板中迴圈輸出資料集或者多維陣列
volist(name,id,offset,length,key,mod,empty)
name(必須):要輸出的資料模型變數
id(必須):迴圈變數
offset(可選):要輸出資料的offset
length(可選):輸出資料的長度
key(可選):迴圈的key變數,預設值為i
mod(可選):對key值模數,預設為2(用於偶數行查詢等)
empty(可選):如果資料為空白顯示的字串
通常模型的select方法返回的結果是一個二維數組,可以直接使用volist標籤進行輸出。
----------------------------------------------------------------------------------
舉例:
在模板定義如下,輸出編號和姓名
<volist name=‘list‘ id=‘vo‘>
{$vo.id}
{$vo.name}
</volist>
支援輸出部分資料,例如輸出其中的第5-15條記錄:
<volist name=‘list‘ id=‘vo‘ offset=‘5‘ length=‘10‘>
{$vo.id}
{$vo.name}
</volist>
輸出偶數行記錄:
<volist name=‘list‘ id=‘vo‘ mod=‘2‘>
<eq name="mod" value=‘1‘>{$vo.name}</eq>
</volist>
mod屬性還用於控制一定記錄的換行:
<volist name=‘list‘ id=‘vo‘ mod=‘5‘>
{$vo.name}
<eq name="mod" value=‘4‘><br/></eq>
</volist>
輸出迴圈變數:
<volist name=‘list‘ id=‘vo‘ key=‘k‘>
{$k}.{$vo.name}
</volist>
如果沒有指定key屬性的話,預設使用迴圈變數i,例如:
<volist name="list" id="vo" >
{$i}.{$vo.name}
</volist>
如果要輸出數組的索引,可以直接使用key變數,和迴圈變數不同的是,這個key是由資料本身決定,而不是迴圈控制的,例如:
<volist name="list" id="vo" >
{$key}.{$vo.name}
</volist>
volist還有一個別名iterate,用法和volist是一樣。
從2.1版開始允許使用函數設定資料集,如:
<volist name=":fun(‘arg‘)" id="vo">{$vo.name}</volist>
<--------------個人原創|轉載請註明‘逗子‘| 適合新手 | 大牛勿噴---------------------------->
TP5學習基礎二:目錄結構、URL路由、資料操作