ホームページ > 記事 > PHPフレームワーク > thinkphp6の共通機能をまとめる
この記事では、thinkphp に関する関連知識を提供します。これは主に、フォーム データの取得、マルチアプリケーション モードの設定、テンプレートのレンダリングなど、一般的に使用されるいくつかの機能を以下のようにまとめています。皆様のお役に立てれば幸いです。
推奨学習: 「PHP ビデオ チュートリアル 」
Alibaba ミラー:composer config -g repo.packagist コンポーザー https://mirrors.aliyun.com/composer/
Laravel 中国ミラー : コンポーザー config -g repo.packagist コンポーザー https://packagist.laravel-china.org
中国フルミラー : コンポーザー コンフィグ -g repo.packagist コンポーザー https:/ /packagist.phpcomposer.com9
コード クラウドまたは git ダウンロードの場合、ベンダー
composer install --ignore-platform-reqs
# がないと実行できないことがわかります。 ##orcomposer update --ignore-platform-reqsTp6 use1. ダウンロード tp6 combos create-project topthink /think tp
2. マルチアプリケーション モードを設定します tp6 のデフォルトの方法は、単一アプリケーション アクセスのために app/controller を入力することです。開発 (例: http://***.com/admin、http://***.com/index) では、マルチアプリケーション モードを有効にする必要があります
3. テンプレート レンダリング
tp3: $this->display();tp5: return $this->fetch();tp6: return View::fetch('index');tp6 にはデフォルトで多くの依存関係パッケージがありません。ダウンロードする必要がありますcomposer require topthink/think-viewコントローラーの紹介think\facade\View を使用;
4. テンプレートジャンプ リダイレクト
'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、デジタル確認コード コンポーザーには、topthink/think が必要です-captcha
7. 画像処理をアップロードしますimage#composer require topthink/think-image
8、mysql select query
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, Pagination
$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}
ページング参照クラスの変更
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);
は主キーを追加せずに更新するところに主キーを追加しますが、実行が成功して 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);}
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 中国語 Web サイトの他の関連記事を参照してください。