[TOC]
# ThinkPHP 操作大全總結
## 1.create方法
普通的表單提交會把所有的表單數據提交上來
~~~
$data = $_POST;
print_r($data);
~~~
結果:Array ( [status] => 1 [comment] => 啊啊啊 [id] => 16 [submit] => 提交 )
* * * * *
create方法處理
~~~
$data = $userApplicantsModel->create(); // 把無用的都顧慮掉了
print_r($data);exit;
~~~
結果Array ( [status] => 1 [comment] => 啊啊啊 [id] => 16 )
* * * * *
## 2.UNION操作
> UNION操作用于合并兩個或多個 SELECT 語句的結果集。
~~~
$Model->field('name')
->table('think_user_0')
->union('SELECT name FROM think_user_1')
->union('SELECT name FROM think_user_2')
->select();
~~~
UNION添加where
~~~
select *
from
(
select 字段 from 表名1
union
select 字段 from 表名2
) as A
where 條件
~~~
* * * * *
## 3.R方法 調用某個控制器的操作方法

在loginController.class.php調用 Lib下的第三方類

~~~
R('User/User/login', array($phone, $password, '', FALSE), 'Lib');
第一個User 是模塊名
第二個User是Lib下的UserLib.class.php 的名稱
第三個login 是UserLib.class.php中的login方法名
array 是login方法需要的參數
LIb是 User模塊下的LIb文件名稱
~~~
> **推薦** 此寫法--用命名空間的寫法(可以引用所有的方法)
~~~
namespace User\Lib\UserLib::login();
~~~
* * * * *
## 4. like查詢多表多字段
>模糊查詢多個表和多個字段
~~~
$keywords = I("post.keywords");
$model = M();
$info = $model->table('new_mall_goods a,new_mall_goods_extend b')->where('a.title = %' . $keywords . '% or a.shop_name = %' . $keywords . '% or a.cate_name = %' . $keywords . '% or a.content = %' . $keywords . '% or b.shop_contact = %' . $keywords . '% or b.cate1_name = %' . $keywords . '% or b.cate2_name = %' . $keywords . '% or b.cate3_name = %' . $keywords . '% or b.cate4_name = %' . $keywords . '% or b.cate5_name = %' . $keywords . '% or b.price1 = %' . $keywords . '% or b.price2 = %' . $keywords . '% or b.price3 = %' . $keywords . '% or b.price4 = %' . $keywords . '% or b.description = %' . $keywords . '%')->where("a.good_id = b.good_id")->select();
~~~
* * * * *
## 5.將數組內元素內容相同的合并成一個
~~~
$arr1 = array(
array('id' = 1 , 'name' = '哈哈');
array('id' = 2 , 'name' = '哈哈');
array('id' = 3 , 'name' = '呵呵');
);
變為
$arr2 = array(
array('id' = 1 , 'name' = '哈哈');
array('id' = 2 , 'name' = '呵呵');
);
~~~
**代碼實例**
~~~
$arr1 = array(
array('id' = 1 , 'name' = '哈哈');
array('id' = 2 , 'name' = '哈哈');
array('id' = 3 , 'name' = '呵呵');
);
$output_arr = array();
$help_arr = array();
foreach ($arr1 as $item) {
if ( !in_array($item['name'],$help_arr)) {
$output_arr[] = $item;
$help_arr[] = $item['name'];
}
}
print_r($output_arr); //$output_arr 就是想要的結果
~~~
* * * * *
## 6.將二維數組中相同的元素過濾并且不改變鍵值
~~~
function array_unique_fb($array){
foreach($array as $k => $v){
$keyvalue = array_keys($v);
$key = array_keys ($v);
$v = implode ('$', $v); //降維,也可以用implode,將一維數組轉換為用逗號連接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重復的字符串,也就是重復的一維數組
foreach($temp as $k => $v){
$temp[$k] = explode('$', $v); //再將拆開的數組重新組裝
}
foreach ($temp as $key => $value) {
$newArray[] = array_combine($keyvalue,$value);
}
return $newArray;
}
~~~
## 7.thinkphp 自動驗證
**靜態定義**
> 在模型中定義驗證規則,稱為靜態定義。
> 我們在模型類里面定義了$_validate屬性如下:
~~~
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
protected $_validate = array(
array('verify','require','驗證碼必須!'), //默認情況下用正則進行驗證
array('name','','帳號名稱已經存在!',0,'unique',1), // 在新增的時候驗證name字段是否唯一
array('value',array(1,2,3),'值的范圍不正確!',2,'in'), // 當值不為空的時候判斷是否在一個范圍內
array('repassword','password','確認密碼不正確',0,'confirm'), // 驗證確認密碼是否和密碼一致
array('password','checkPwd','密碼格式不正確',0,'function'), // 自定義函數驗證密碼格式
);
}
~~~
> 定義好驗證規則后,就可以在使用create方法創建數據對象的時候自動調用:
~~~
$User = D("User"); // 實例化User對象
if (!$User->create()){
// 如果創建失敗 表示驗證沒有通過 輸出錯誤提示信息
exit($User->getError());
}else{
// 驗證通過 可以進行其他數據操作
}
~~~
**動態驗證**
**注:動態驗證不依賴模型類的定義,所以通常用M函數實例化模型就可以**
> 如果采用動態驗證的方式,就比較靈活,可以根據不同的需要,在操作同一個模型的時候使用不同的驗證規則,例如上面的靜態驗證方式可以改為:
~~~
$rules = array(
array('verify','require','驗證碼必須!'), //默認情況下用正則進行驗證
array('name','','帳號名稱已經存在!',0,'unique',1), // 在新增的時候驗證name字段是否唯一
array('value',array(1,2,3),'值的范圍不正確!',2,'in'), // 當值不為空的時候判斷是否在一個范圍內
array('repassword','password','確認密碼不正確',0,'confirm'), // 驗證確認密碼是否和密碼一致
array('password','checkPwd','密碼格式不正確',0,'function'), // 自定義函數驗證密碼格式
);
$User = M("User"); // 實例化User對象
if (!$User->validate($rules)->create()){
// 如果創建失敗 表示驗證沒有通過 輸出錯誤提示信息
exit($User->getError());
}else{
// 驗證通過 可以進行其他數據操作
}
~~~
## 8.打印log日志
測試程序時,很有用
~~~
'LOG_RECORD' => true, // 開啟日志記錄
'LOG_LEVEL' =>'EMERG,ALERT,CRIT,ERR', // 只記錄EMERG ALERT CRIT ERR 錯誤
~~~
~~~
class Log {
// 日志級別 從上到下,由低到高
const EMERG = 'EMERG'; // 嚴重錯誤: 導致系統崩潰無法使用
const ALERT = 'ALERT'; // 警戒性錯誤: 必須被立即修改的錯誤
const CRIT = 'CRIT'; // 臨界值錯誤: 超過臨界值的錯誤,例如一天24小時,而輸入的是25小時這樣
const ERR = 'ERR'; // 一般錯誤: 一般性錯誤
const WARN = 'WARN'; // 警告性錯誤: 需要發出警告的錯誤
const NOTICE = 'NOTIC'; // 通知: 程序可以運行但是還不夠完美的錯誤
const INFO = 'INFO'; // 信息: 程序輸出信息
const DEBUG = 'DEBUG'; // 調試: 調試信息
const SQL = 'SQL'; // SQL:SQL語句 注意只在調試模式開啟時有效
// 日志記錄方式
const SYSTEM = 0;
const MAIL = 1;
const FILE = 3;
const SAPI = 4;
// 日志信息
static $log = array();
// 日期格式
static $format = '[ c ]';
~~~
## 9.realpath — 返回規范化的絕對路徑名
> realpath() 擴展所有的符號連接并且處理輸入的 path 中的 '/./', '/../' 以及多余的 '/' 并返回規范化后的絕對路徑名。返回的路徑中沒有符號連接,'/./' 或 '/../' 成分。
發現只能在config配置中可以使用 不能再控制器中使用
> realpath() 失敗時返回 FALSE,比如說文件不存在的話。
**用這個可以保證文件路徑在服務器端可以正常訪問**
- 關于我們
- ApiCloud
- 支付模塊
- 微信支付--wxPay(客戶端)
- 微信支付--wxPay(服務端)
- 支付寶支付--aliPay(客戶端配置)
- 支付寶支付--aliPay(服務端配置)
- DoT模板
- 緩存模塊
- 監聽模塊
- 百度定位模塊
- 設置狀態欄字體顏色
- 選擇城市插件
- 跨頁面執行方法
- 安卓-點擊返回事件
- 上傳圖片模塊
- 點擊彈出放大圖片層
- 魅族手機apiready問題
- 分享
- 跨win或frm執行腳本
- 關于ios數字自動識別成手機號
- 百度地圖bMap
- 語音識別模塊
- tabBarMenu底部導航
- 第三方登錄
- QQ網站和appQQ賬號的統一問題解決
- 微信登錄
- QQ登錄
- 微博登錄
- 上拉加載、下拉刷新模塊
- 圖片緩存
- 文件和圖片緩存機制分享
- PHP
- 支付寶及時到賬
- no input file specified報錯解決
- thinkphp 整合kindeditor
- 整合tpshop微信模塊到thinkcmf中
- thinkphp3.1.3整合支付寶
- 網站接入QQ OAuth2.0登錄教程
- ThinkPHP整合百度編輯器Ueditor
- PHP加快執行效率的寫法規范
- ThinkPHP操作大全
- PHP操作大全
- Thinkphp中SQL操作返回值
- php5.3 foreach 使用&(與運算符)引用賦值要注意的問題
- mysql給字段追加值
- 阿里大魚短信平臺接入
- Navicat 導出 Mysql 數據字典
- php 面向對象全面教程
- PHP5下調用SOAP
- PHP處理時間格式添加空格
- 偽裝URL請求(.htaccess)
- url請求參數加解密
- JS插件
- artDialog彈窗-頁面傳值
- jQuery點擊遮罩彈出層固定居中
- jeBox原生彈窗
- bxslider輪播
- js生成指定位數隨機數
- 發送短信倒計時
- js調試
- jQuery.validator 表單驗證規則
- Swiper 輪播
- 獲得焦點時-圖片抖動
- uploadify無刷新上傳圖片
- 導航下拉隱藏上拉顯示
- 獲得焦點時-加黑色蒙版
- jquery.qrcode.js生成二維條形碼(支持中文)
- jquery.qrcode.js生成二維條形碼(官方不支持中文)
- nth-child 選擇器
- 無刷新點擊實現加載更多數據
- 刷新頁面方法
- 判斷滾動條向上向下
- 跨瀏覽器復制jQuery-zclip
- js校驗表單后提交表單的三種方法
- 用JS判斷下拉框是否選中
- div中滾動
- 提交時彈出模態框
- 當圖片不顯示時替換方法
- 前端
- CSS3
- HTML5
- css技巧
- 移動端rem
- Flex布局
- 電商詳情滾動條監聽
- VueCircleMenu圓環按鈕
- iframe自適應頁面高度
- 百度Echart
- input:radio改變選中顏色
- Jquery
- 響應式布局基本實現Media Query
- 循環輸出只輸出新內容
- 小程序
- wx.request坑
- 概要
- git操作
- 本地記住密碼
- 操作
- 生成ssh公鑰 記住密碼
- git避坑
- ES6學習手札
- 調試小插件
- 谷歌插件Postman
- PHP調試助手
- WordPress
- 緩存服務器Redis
- 在線代碼運行 Docker
- 在ubuntu下怎樣安裝https
- BrowserSync 瀏覽器同步測試工具
- getmarkman高效的設計稿標注、測量工具
- PHPstrom軟件
- 服務器
- linux 安裝搭建服務器配置及nginx配置
- tpshop的nginx 服務器配置方法
- (服務器訪問文件404解決辦法)IIS 之 添加MIME擴展類型及常用的MIME類型列表
- mysql部分
- mysql緩存
- MySql監控工具--mytop
- MySql主從搭建
- mysql優化
- Mysql 復制 (主從復制)
- iOS開發筆記 - 上線流程
- VUE避坑指南
- 從零開始學Vue
- Vue-cli
- Webpack
- VUE小記
- npm打包空白
- 打包背景圖片/項目圖片不顯示
- VUE避坑指南/elementUI upload 自定義http-request上傳
- 關于watch監聽路由重復加載方法
- 解決加載內容的時候閃動問題
- vuecli沒有network訪問地址
- python學習
- python初始
- pytho內置函數大全
- win10 播放器播放TS文件問題
- 設計網站
- VUE避坑指南/VUE-CLI部署空白
- swiper使用問題
- uni-app學習手冊
- 目錄結構
- layUI
- nodesass版本sassloader版本問題