今天需要給金融部門那邊做一個信用卡的推廣頁面,他們系統是用PHP的tp框架做的。我記得最早做tp還是2的時候,和現在的5.1相差太大了,中間開發的時候,還是遇到了點問題。所以,把今天的問題記錄下,作個備案。
最新版的tp感覺和laravel差不多吧,不過,我一直不太喜歡那種重框架,所以一般也就是需要的時候才去研究看下,由於時間急,我沒有細看tp最新的文檔,都是直接看到他們項目原來的結構。中間遇到了點低級問題
安裝
這個好像沒啥,直接把工程搞下來的,和tp目錄結構一樣,虛機配置把主目錄配置的public下面就行了
配置文件
它這個是從config/目錄來讀取的。里面分成了很多不同的文件,配置是單獨分開的。另外,如果工程下面有.env文件,那么配置可以配置在這個里面,然后在config/下面來讀取,如:
.env
[database]
type = mysql
database = 'zfinance'
hostname = '172.13.33.444'
port=3306
config/database.php
return [
// 數據庫類型
'type' => Env::get('database.type', 'mysql'), //環境變量取不到,取默認
// 服務器地址
'hostname' => Env::get('database.hostname', 'localhost'),
不過,如果模塊下面有配置,則優先取模塊的配置,如application/index/config/database.php
路由
開始通過url,去對應的模塊下找controller沒找到,后面發現它配置了路由。
首先我看項目的route目錄下面定義了幾個路由配置,如admin.php,api.php
Route::rule('card/:controller/:action', 'admin/:controller/:action');
這種靈活配置自已想要的路由,上面顧名思義就是訪問card/xxx/xx 到 admin/xxx/xx路由
模型
原來的系統有一個類似這樣的查詢
$list = CreditCardModel::where('status', CreditCardModel::STATUS_ACTIVE)
->where('sale', 1)
->order(['id'=>'desc'])
->select()
->append(['b_id_text', 'bank_icon'])
->toArray();
里面有一個append,這個方法后面接了數組是b_id_text,bank_icon這種,我的表里面是沒有b_id_text這種的,但是$list輸出來是有的。后面看文檔,這個叫獲取器,可以把數據合並到當前的行,但是需要在模型層中定義方法,類似這樣
protected function getBidTextAttr($value, $data)
{
if(empty($data['b_id'])) {
return '';
}
$bank = Bank::getCacheInfo($data['b_id']);
return $bank['name'] ?: '';
}
protected function getBankIconAttr($value, $data)
{
if(empty($data['b_id'])) {
return '';
}
$bank = Bank::getCacheInfo($data['b_id']);
return $bank['icon'] ?: '';
}
看到就是定義了getXXAttr這樣的方法,取代了原來我們把數據查出來后,再去組裝。找了好久才找到這種用法,此外,他還有一個setXXAttr做設置的,原理一樣,只不過是在做存儲的時候用到的。
模板渲染
本來這個系統是前台端分離的,但我今天這個沒有用,所以用的服務端渲染的,里面有一個配置
default_return_type => 'json'; //支持html,json,xml等
我在控制器里面,使用
return $this->fetch('index');
出來的會是json格式的,這里需要使用 快捷函數,表示使用某種類型輸出
return view('index'); //還有json('index'); xml('index')等
好了,搞定了上面的這些,就可以開發了,基本也都不難,可以說就是tp的一些基本了,由於我沒有細看文檔,所以,中間可能浪費了點時間。
感覺現在的php框架,也越來越長得相像了。這也是好事,基本上會一種,其它的有些也能猜出來,不過,我還是不喜歡這種需要花時間去學的框架,只是要的時候學習下,我喜歡Yaf,也一般用這個做接口,簡單高效,需要什么,自已搭建可控,多好。