thinkphp6の共通機能をまとめる

WBOY
リリース: 2022-05-07 21:35:48
転載
4056 人が閲覧しました

この記事では、thinkphp に関する関連知識を提供します。これは主に、フォーム データの取得、マルチアプリケーション モードの設定、テンプレートのレンダリングなど、一般的に使用されるいくつかの機能を以下のようにまとめています。皆様のお役に立てれば幸いです。

thinkphp6の共通機能をまとめる

推奨学習: 「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

# がないと実行できないことがわかります。 ##or

composer update --ignore-platform-reqs

Tp6 use

1. ダウンロード tp6 combos 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

コントローラーの紹介

think\facade\View を使用;

4. テンプレートジャンプ リダイレクト
thinkphp6の共通機能をまとめる

composer require liliuwei/thinkphp-jump

コントローラーの紹介

ヘッダーの紹介: \liliuwei\think\Jump を使用します;

クラス内導入: 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、デジタル確認コード コンポーザーには、topthink/think が必要です-captcha

アプリケーション app ディレクトリ ファイルでグローバル ミドルウェア middleware.php を見つけ、以下にコメントされているコード \think\middleware\SessionInit::class を開きます

7. 画像処理をアップロードしますimage#composer require topthink/think-image

8、mysql select query
thinkphp6の共通機能をまとめる

#デフォルトの選択クエリである tp5 から移行tp6 は 2 次元配列を返し、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);
ログイン後にコピー
thinkphp6の共通機能をまとめる
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);}
ログイン後にコピー

を取得できない場合は、検索を続けて、取得できる insertGetId があることを見つけるしかありません。つまり、開発を迅速に行うために、通常は save を使用して問題を解決しますが、自動インクリメントされた主キーを取得する必要がある場合は、insertGetId に変更します。

11、tp6 高级查询and和or同时使用
thinkphp6の共通機能をまとめる
tp6针对and查询和or查询有快捷方法
thinkphp6の共通機能をまとめる
但是这些快捷方法会有很多局限性,当我们对数据进行一系列的复杂查询时这些快捷方法就会出现很多问题例如:

$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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート