這篇文章為大家帶來了關於thinkphp的相關知識,其中主要整理了一些常用的功能,包括獲取表單資料、設定多應用模式、模板渲染等等相關內容,下面一起來看一下,希望對大家有幫助。
推薦學習:《PHP影片教學》
阿里鏡像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
Laravel China鏡像 : composer config -g repo.packagist composer https://packagist.laravel-china.org
中國全量鏡像:composer config -g repo.packagist composer https://packagist. phpcomposer.com9
在碼雲或git下載案例發現沒有vendor無法運行
composer install --ignore-platform-reqs
或
composer update --ignore-platform-reqs
1、下載tp6
composer create-project topthink/think tp
2、設定多重應用模式
tp6預設是單一應用存取預設進入app/controller裡面的方法,如果需要做多應用程式開發(例:http://***.com/admin、 http://***.com/index)需要開啟多重應用模式
composer requiretopthink/think-multi-app
php think build 應用程式名稱(例如:index或admin)
3、模板渲染
tp3: $this->display();tp5: return $this->fetch();tp6: return View::fetch('index');
tp6預設缺少很多依賴套件的,需要下載
composer require topthink/think-view
#控制器引入
use think\facade\View;
4、模板跳轉重定向
composer require liliuwei/thinkphp-jump
控制器引入
頭部引入:use \liliuwei\think\Jump;
類別內引入:use Jump;
如果報錯:
查看app/config/jump.php是否有設定:
'dispatch_success_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html','dispatch_error_tmpl' => app()->getRootPath().'/vendor/qeq66/think-jump/template/jump.html'
5、取得表單資料
控制器引入
use think\facade\Request;$code = Request::param('code');
或
$code = input("code");
6、數位驗證碼
composer require topthink/think-captcha
在應用程式app目錄下找到全域中間件middleware.php文件,把下面註解的程式碼\think\middleware\SessionInit::class開啟
#7、上傳圖片處理圖片
composer require topthink/think-image
#8、mysql select查詢
從tp5過渡過來的,預設select查詢是返回二維數組,tp6返回資料集,雖然官方說和數組操作基本無差別
但是有些時候還是陣列好用例如a##rr[k][0] = "test"這種間接修改,在預設回傳的資料集中,是報錯的,但是陣列是可以這樣操作的 1、
db::name('ceshi')->select()->toArray();2、
修改tp6目錄下的/vendor/topthink/think-orm/src/db的BaseQuery.php
$resultSet = $this->connection->select($this);下面增加一行
return $resultSet;
9、分頁
$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);使用paginate方法取得分頁數據,查詢集合無法新增的下標值查詢條件需要增加'query' => request()->param (),解決寫入法:php端:
// An highlighted block$list = db::name('admin_menu')->where($where)->paginate(['list_rows'=> 10,'query' => request()->param(),]);$new_arr = array();foreach($list as $k=>$v){$v[$k]['erji_menu'] = “案例”;$new_arr[] = $v;} // 获取分页显示$page = $list->render();// 模板变量赋值View::assign('list', $new_arr);View::assign('page', $page);html端{$page|raw}分頁引用class修改tp6\vendor\topthink\think-orm\src\paginator\driver\Bootstrap.php
10、新增資料差異 對比tp5 save方法用於更新add方法用於添加
tp6 save既是更新也是添加add方法被刪除
db::name('ceshi')->where(array('tz_id'=>$post['tz_id']))->save($users);db::name('ceshi')->save($users);加主鍵where是更新不加主鍵是添加,但是會出現問題執行成功只會返回0,1
不會像tp5 add方法回傳新增資料的主鍵id
/** * 插入记录 * @access public * @param array $data 数据 * @param boolean $getLastInsID 返回自增主键 * @return integer|string */public function insert(array $data = [], bool $getLastInsID = false){ if (!empty($data)) { $this->options['data'] = $data; } return $this->connection->insert($this, $getLastInsID);}add方法改成了insert方法,雖然註解上面寫著回傳自增主鍵,但我這邊測試還是沒有拿到自增主鍵,不清楚是版本問題還是什麼這裡不深究如果你沒遇到就當我沒說
/** * 插入记录并获取自增ID * @access public * @param array $data 数据 * @return integer|string */public function insertGetId(array $data){ return $this->insert($data, true);}然後拿不到只能繼續找發現有一個insertGetId可以拿到。也就是說為了快速開發,平常還是用save解決,遇到要拿自增主鍵就換成insertGetId
#
11、tp6 高级查询and和or同时使用
tp6针对and查询和or查询有快捷方法
但是这些快捷方法会有很多局限性,当我们对数据进行一系列的复杂查询时这些快捷方法就会出现很多问题例如:
$where1[] = ["order_khname","like",'%'.$keywords.'%'];$where2[] = ["order_khqq","like",'%'.$keywords.'%'];$where3[] = ["order_khmobile","like",'%'.$keywords.'%'];$where[] = ["order_type","=",$ddzt];$list = db::name('ceshi') ->where($where) ->whereOr([$where1,$where2,$where3]) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(), ]);
这里我们想要的sql格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 and ( ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' )) LIMIT 0,10
实际生成的格式为:
SELECT * FROM `dc_ceshi` WHERE `order_type` = 0 OR ( `order_khname` LIKE '%1%' ) OR ( `order_khqq` LIKE '%1%' ) OR ( `order_khmobile` LIKE '%1%' ) LIMIT 0,10
这里就可以用到闭包查询(注:这只是我学习tp6的时候遇到的问题然后在tp6文档里面找到的解决方式,直接用原生sql也是可以解决,把where条件直接改成一个自定义的字符串也可以解决,用tp5的连接方式也应该可以但是我没试)
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
这时候得到sql格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%1%' OR `order_khqq` LIKE '%1%' OR `order_khmobile` LIKE '%1%' ) AND `order_type` = 0 LIMIT 0,10
已经满足了我的需求,但是还是有一个问题就是如果keywords这个变量没有值的时候他查询的语句格式为:
SELECT * FROM `dc_ceshi` WHERE ( `order_khname` LIKE '%%' OR `order_khqq` LIKE '%%' OR `order_khmobile` LIKE '%%' ) AND `order_type` = 0 LIMIT 0,10
这种情况只需要在加个if判断:
$list = db::name('ceshi') ->where(function ($query) use ($keywords){ if($keywords){ $query->where("order_khname","like",'%'.$keywords.'%') ->whereOr("order_khqq","like",'%'.$keywords.'%') ->whereOr("order_khmobile","like",'%'.$keywords.'%'); } }) ->where($where) ->paginate([ 'list_rows'=> 10, 'query' => request()->param(),]);
12、tp6 find查询变动
tp5、tp3我们查询一个表是否存在数据可以直接查询一条
$datafind = db::name('ceshi')->find();
tp6 find查询必须增加where条件或者order排序,为什么不知道。有大神知道指点下O(∩_∩)O哈哈~
$datafind = db::name('ceshi')->order('ID DESC')->find();
推荐学习:《PHP视频教程》
以上是歸納總結thinkphp6常用功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!