TP5學習基礎二:目錄結構、URL路由、數據操作


一.安裝
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>

 

<--------------個人原創|轉載請注明'逗子'| 適合新手 | 大牛勿噴---------------------------->


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM