ソース コードは github: https://github.com/lvyahui8/dbuilder.git にあります。記事内の写真が小さすぎてよく見えない場合は、「新しいタブで開く」を右クリックして元の写真をご覧ください
コンピュータソフトウェア技術の発展により、データベースはフォーマットされたデータを保存するために最も広く使用される媒体となり、データベースプログラム開発技術もますます完成し、データベースプログラム開発を簡素化し、運用の主流になりました。リレーショナルデータベース。データベース プログラムの主要なコードは CRUD (作成、取得、更新、削除) コードです。ORM フレームワーク機能の改良により、CRUD コードを作成することにより、別のデータベース テーブル上で動作する CRUD コードも高度に再利用できます。 。現在、開発者は繰り返し CRUD コードを記述することが常態となっており、開発者の熱意が著しく低下するだけでなく、開発効率も低下します。そのため、この作業を軽減するために、CRUD コードを迅速に生成できる製品が急務となっています。開発効率を向上させます。
現在、海外ではCrudKit、CRUD-Admin-Generator、Dadabik、GroceryCrud、SximoBuilderといった、上記のニーズを解決するユーザビリティの高いCRUDジェネレーター製品が生まれています。これらの製品にはそれぞれ独自の特徴がありますが、共通点もあります。それは、すべて PHP に基づいて開発されているということです (これは、PHP 構文の柔軟性と解析によってある程度決まります)。代表的なものとしては SximoBuilder が挙げられます。 SximoBuilder は、デザインが独特で使いやすさが高く、人気も高いのですが、次のような欠点もあります。
カスタム フォーム コントロールはサポートされていません;国内外の CRUD ジェネレーターの研究状況を踏まえ、著者は DBuilder (D は DataAdministrator の略) と呼ばれる CRUD ジェネレーターを開発しました。
DBuilder は、モジュールがコード単位であり、コードがテンプレートから生成されるという SximoBuilder の考え方を利用していますが、コード生成ロジックは SximoBuilder とは完全に異なります。 SximoBuilder のコア コード生成と一般的な CRUD 機能の実現に基づいて、コード ロジックを書き換えることでその欠点 (大規模なコードの冗長性とフロントエンド検証の欠如) を改善します。
第 2 章 DBuilder システム分析
DBuilder の主なユーザー グループは Web バックエンド管理者と開発者であるため、そのシステム分析プロセスでは、より Web バックエンド管理者と開発者の観点から問題が考慮されます。プロジェクトは次のコア機能を実装する必要があります。
1)
データソース管理 ユーザーはインターフェースでプロジェクトの複数のデータソースを設定できます。設定されたデータ ソース情報には、データベースの種類、アドレス、データベース名、ポート、ユーザー名、パスワード、その他の情報が含まれます。データ ソースの追加、削除、変更、クエリをサポートし、データ ソースの追加、削除、変更、クエリによってシステムの問題が発生しにくくなります。
2)コード生成
この機能は、データ ソースとデータ テーブルを選択した後、フォーム構成、リスト (テーブル) リスト構成、リレーションシップ構成、およびグローバル属性を含むデータベース テーブルのフィールドを簡単に構成できます。 。 構成。構成が完了したら、DBuilder はデータベース テーブルの CRUD MVC コードを生成できる必要があります。つまり、CRUD で使用可能な関数を実装する必要がありますが、コードを記述する必要はありません。
3)データベース
テーブルCRUD生成されたコードは、データ テーブル レコードの作成、削除、更新、およびクエリ操作をサポートする必要があります。
4)メニュー管理
DBuilder は、ユーザーがメニュー項目をクリックした後に DBuilder によって生成された CRUD 関数を使用できるように、生成されたコードをメニュー項目にバインドできる必要があります。このメニューにはバックグラウンド メニューが含まれている必要があります。フロント メニューは必要ありません。
5)ユーザー管理
ユーザーは複数の役割を実現する必要があります。電子メール アドレスは、ユーザーの一意の識別子として、またログイン パラメーターとして使用できなければなりません。将来的には、OAuth2.0 に基づく QQ、WeChat、Sina Weibo の相互接続ログインのサポートも実装する予定です。
6)権限管理
DBuilder は、さまざまなユーザー ロールに対するさまざまな CRUD コードの実行およびアクセス権の 3 次元構成機能を実装できなければなりません。たとえば、記事管理用の CRUD 機能モジュールがあり、ユーザーの役割がシステム管理者 (SuperAdmin)、管理者 (Admin)、ゲスト (Guest) に分かれており、DBuilder は次のような 3 次元の権限設定を実装できる必要があります。そしてそれをすべてのモジュールのデフォルトの権限として使用します。
表 2-1 モジュール権限設定表
ユーザーグループと権限 |
見る |
編集 |
削除 |
エクスポート |
スーパー管理者 |
√ |
√ |
√ |
√ |
管理者 |
√ |
√ |
√ |
|
ゲスト |
√ |
|
|
|
7) サイトパラメータ設定
DBuilder は、Web サイトの Web バックグラウンド プログラムとして、サイトのグローバル パラメーターを構成するためにも必要です。これらのパラメーターには、Web サイト名、キーワード、連絡先アドレス、フレンドリー リンクなどが含まれます。
8) 操作ログ
DBuilder は、訪問したページ、実行された CRUD の種類、時間、その他の情報を含むユーザーの操作情報を記録する必要があります。ログ記録形式は、データベースとファイルの 2 つの方法をサポートしています。
9) 複数の言語サポート
DBuilder は複数の言語間の切り替えをサポートする必要があります。中国語と英語の少なくとも 2 つの言語がサポートされる必要があり、中国語がデフォルトになります。
10) 複数のデータベースタイプをサポート
DBuilder は複数の種類のデータベースをサポートする必要があり、現在は主に mysql、MS SqlServer、oracle、PostGreSQL などのリレーショナル データベースをサポートしています。
要件に応じて抽出できるエンティティには、ユーザー、ユーザー グループ、データ ソース、コード モジュール、メニューが含まれ、関係には権限とログが含まれます。エンティティと関係の意味は次のとおりです:
2.3 原則要件
DBuilder は、高性能で可用性の高い CRUD ジェネレーターのセットとして作成される必要があります。このために、DBuilder の設計は次の原則に準拠する必要があります。
DBuilder はデータベース フィールドごとに正確で構成可能である必要があります。
ユーザーがこれに基づいて完全な WEB バックエンド アプリケーションを迅速に構築できるように、WEB バックエンド アプリケーションのプロトタイプが必要です。DBuilder は多数の拡張インターフェイスを残し、ユーザーが二次開発を通じてより複雑な機能を迅速に実装できるようにする必要があります。
3.1.1 コア CRUD モジュール
コア CRUD モジュールは、コア CRUD 操作を実装します。GModule MVC のコントローラーへのすべての CRUD リクエストは、最終的にコア CRUD モジュールに転送されて処理されます。 Core CRUD モジュールは、GModule が実装する前処理および後処理インターフェイスを開きます。これらのインターフェイスは、モデル、コントローラー、およびビューに反映されます。コアCRUDモジュールには主に以下のファイルが含まれています
app/controllers/admin/AdminController.php
app/config/crud/admin.php app/views/admin/core/list.blade.php
app/views/admin/core/form.blade.php
コード ファイルの名前は GModule の名前に依存するため、生成されたコード ファイルが競合しないようにするために、GModule の名前 (GModule Key、GModule Name) が、GModule の固有の識別子として使用されます。 Gモジュール。各GModuleの情報はデータベースに保存されます。新しい GModule 操作では、上記のすべてのコード ファイルが作成され、関連ファイルが更新され、GModule レコードがデータベースに挿入されます。 GModule の更新操作では、構成ファイルのみが更新されます。
GModule は、以下で説明する MVC コードと CRUD 構成コードで構成されます。
1) コントローラーインターフェイス
GModule モジュールのコントローラーが A、コア CRUD モジュールのコントローラーが B であるとすると、A は B を継承する必要があります。 CRUD リクエストは最初に A にルーティングされ、実際のハンドラーは B になります。 A は、B によって開かれた次のインターフェイスを実装します。
GModule MVC コードのモデルも BaseModel から継承しており、BaseModel クラスによって開かれるいくつかのインターフェイスを実装することで拡張できます。
formatXXXAttribute(): このインターフェースは、特定のフィールドをフォーマットするために使用されます。この製品は Laravel に基づいていますが、Laravel には getXXXXAttribute() という同様のインターフェイスがすでにあります。ただし、このようなインターフェースの優先度はフィールドの優先度よりも高く、特殊なケースでは開発に不都合が生じるため、同様のインターフェースはフィールド自体の優先度よりも低い優先度で設計されます。
3) ビューインターフェイス
ビューの拡張インターフェイスは前の 2 つとは異なり、主にサブビューとビュー ブロックに反映されます。つまり、コア CURD モジュールのビューに基づいて、ビュー コンポーネントが拡張されます。デフォルトでは、Core CRUD MVC ビューは、ページを満たすテーブルまたはフォームを生成します。 View インターフェイスでは、ページ コンポーネントをテーブル上で上下左右に展開する機能が提供されます。
4) 構成
各 GModule は、メイン テーブルの各フィールドの GModule の設定パラメータとレイアウト パラメータを含む設定ファイルに対応します。
3.1.3 モジュール関係
図 3-2 モジュールの関係
図 2-2 からわかるように、GModule 管理モジュールはユーザー設定に基づいて GModule A を生成し、ユーザーの CRUD リクエストが GModule A に到達すると、GModule はリクエストを処理のために Core CRUD に転送し、Core CRUD モジュールに転送します。次に、SQL を使用してデータベースに対して CRUD 操作を実行します。
DBuilder プロジェクトのソリューションは、実際の CRUD 操作をコア CRUD モジュールに渡して実行します。CRUD パラメーターは GET または POST リクエスト パラメーターと GModule 構成で構成されますが、GModule の MVC コードはコア CRUD の前処理またはオープン性のみを実装します。 MVC 後処理インターフェイス。
図 2-3 は、モジュールの生成と CRUD リクエストの処理を含む DBuilder のコア フローチャートです。図 2-4 は、SximoBuilder でのモジュールの生成と CRUD リクエストの処理のフローチャートです。
図 3-3 DBuilder コード生成と CRUD 処理プロセス
図 3-4 SximoBuilder コード生成と CRUD 処理プロセス
2 つを比較すると、2 つの最大の違いは、Sximo のように独立して実行できるモジュールごとに CRUD コードのセットを生成するのではなく、DBuilder が CRUD コードを再利用することであることがわかります。この利点は、モジュール CRUD MVC を介して前処理/後処理インターフェイスを実装することにより、再利用性が向上し、スケーラビリティが実現されることです。
コア データ ソースは、DBuilder のデフォルトのデータ ソースです。そのタイプは mysql で、データベース名は dbuilder です。このセクションでは、「データ プロトタイプ分析」セクションに従って詳細なデータベース設計を実行します。プログラムのパフォーマンスを向上させるために、データ ソース情報はコード ファイル app/config/datasource.php に保存されます。ファイルの内容は次のとおりです。
'コア' => 配列 ( 'ドライバー' => 'mysql', 'ホスト' => 'ローカルホスト', 'データベース' => 'dbuilder', 'ユーザー名' => 'root', 'パスワード' => 'root', 'charset' => 'utf8', '照合順序' => 'utf8_unicode_ci', 'プレフィックス' => '', '編集' => false, 'ポート' => 3306, )、 // その他のデータソース );
|
1) d_menu テーブル: 背景の左側にあるツリー メニューを表し、クリックしてジャンプできる各メニュー項目はモジュールに関連付けられている必要があります。
表 3-1 Web バックエンドの左側のメニュー表
フィールド
|
タイプ
|
デフォルト
|
情報
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ID
|
int
|
自動インクリメント
|
プリ
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
モジュールID
|
int
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
モジュール名
|
varchar(12)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
親ID
|
|
ヌル
|
親メニュー項目
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
タイトル
|
varchar(12)
|
module_title
|
表示名
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_注文
|
int
|
0
|
フィールドの並べ替え
|
フィールド |
タイプ |
デフォルト |
情報 |
ID |
int |
自動インクリメント |
プリ |
名前 |
varchar(32) |
|
ういん |
タイトル |
varchar(32) |
|
モジュールタイトル |
メモ |
varchar(32) |
|
モジュールの説明 |
db_source |
varchar(16) |
コア |
データソース名 |
db_table |
varchar(16) |
|
モジュールメインテーブル |
db_table_key |
varchar(16) |
|
メインテーブルPRI |
3) D_user テーブル: バックグラウンド プログラムを使用するユーザーを保存します。
表 3-3 Web バックエンド ユーザー
フィールド |
タイプ |
デフォルト |
情報 |
ID |
int |
自動インクリメント |
プリ |
ユーザー名 |
ヴァルカー(64) |
|
ユーザー名 |
メール |
varchar(64) |
|
メール |
パスワード |
varchar(64) |
|
ハッシュ |
塩 |
varchar(64) |
|
塩 |
last_login |
タイムスタンプ |
|
最終ログイン時間 |
remember_token |
|
|
パスワードを忘れないでください |
グループID |
int |
|
グループID |
4) d_group テーブル: バックグラウンド ユーザーのグループ化情報を表します。
表 3-4 ユーザーグループ表
フィールド |
タイプ |
デフォルト |
情報 |
ID |
int |
自動インクリメント |
プリ |
名前 |
ヴァルカー(64) |
|
グループ名 |
メモ |
varchar(128) |
|
グループの説明 |
レベル |
int |
|
グループレベル |
5) D_group_access テーブル: 各 GModule、異なるバックグラウンド ユーザー グループ、およびさまざまな操作権限の 3 次元の権限情報を記録します。
表 3-5 モジュールのユーザーグループ権限テーブル
フィールド |
タイプ |
デフォルト |
情報 |
ID |
int |
自動インクリメント |
プリ |
グループID |
int |
|
グループID |
モジュールID |
int |
|
モジュールモジュールID |
編集 |
int |
1 |
編集可能 |
見る |
int |
1 |
閲覧可能 |
削除 |
int |
1 |
削除可能 |
エクスポート |
int |
1 |
エクスポート可能 |
6) D_logテーブル: 各ユーザーの操作ログを記録します。
表3-6 ユーザー操作ログ
フィールド |
タイプ |
デフォルト |
情報 |
ID |
int |
自動インクリメント |
プリ |
ユーザーID |
int |
|
ユーザーID |
ip_addr |
varchar(15) |
|
クライアントIP |
モジュールID |
int |
|
訪問したモジュールID |
module_title |
varchar(16) |
|
|
タスク |
varchar(16) |
|
操作 |
作成場所 |
タイムスタンプ |
|
エクスポート可能 |
DBuilder は、複数のデータ ソースと複数の種類のデータベースをサポートする必要があります。データ ソース情報は d_database テーブルに保存されます。 データベース操作が頻繁な操作であることを考慮すると、データ ソース情報がデータベースに保存されている場合、データベース操作ごとにさらに 1 回のデータ ソース クエリ操作が必要となり、パフォーマンスが無駄になります。この場合、DBuilder はデータ ソース情報をデータベースではなくコード ファイルに保存する必要があります。 データ ソース管理情報には、データ ソース名 (データ ソースの一意の識別子、DBuilder のデフォルトのデータ ソース名は core)、データベース タイプ、アドレス、ポート、データベース名、ユーザー名、パスワード、その他の情報が含まれます。データ ソース管理モジュールはテーブルの追加、削除、変更、クエリ操作を実行しないため、データ ソース管理モジュールは GModule モジュールではありません。このモジュールのコードは完全に手書きです。
DBuilder は、GModule を生成するためのユーザー インターフェイスとして「Module」という名前の GModule を使用します。このモジュールは GModule 管理モジュールと呼ばれます。つまり、GModule 管理モジュール自体が GModule に格納されます。コア データ ソースの場合、GModule の名前を「Module」に変更します。 GModule 管理モジュールには、GModule を作成、更新、削除するためのすべてのコード ファイルとデータベース レコードが含まれています。 GModule の作成と削除には、グローバル GModule ルーティングを更新する必要があります。
1) GモジュールルーティングGModule ルートは、別のコード ファイルで定義されます。これは、GModule 名をマイナス記号で区切ってキーとしてすべて小文字にした文字列です (例: GModule 名が OrderItem の場合、キー値は order-item です)。モジュール内のコントローラーを使用する クラスのクラス名は値のマップ辞書であり、GModule ルーティングはグローバルです。
2) 新規および更新された GModule
新しい GModule を作成すると、データベースにレコードが生成され、すべてのモジュール ファイルが生成され、ルートが更新されます。更新操作では構成ファイルのみが変更されます。新規作成と更新の両方で、GModule 構成のグラフィカル構成インターフェイスである同じ編集ビューを使用します。
3) Gモジュールの削除
GModule を削除すると、すべての GModule MVC コードが削除され、GModule 設定コードが削除され、データベース テーブル レコードが削除され、GModule ルーティングが更新されます。
3.5コアCRUDモジュール
コア CRUD モジュールは、CRUD リクエストを処理する DBuilder の実際のプロセッサです 次の部分で構成されます。 1) パラメータ解析の初期化
モデルを初期化し、最初のクエリーとしてモジュールのモデル オブジェクトをインスタンス化します。モジュール構成をロードし、未設定の値にデフォルト値を設定し、パラメータを集約します。
2) フォーム
主に新規機能とアップデート機能が含まれます。 GModule メイン テーブルの主キー PrimaryKey が設定されているかどうかに基づいて、それが新規操作であるか更新操作であるかを判断します。下の写真はFormモジュールの処理です
図 3-5 フォーム実行プロセス
フォームは 2 つの部分に分かれています。最初の部分では、ユーザーが入力するフォーム ページが表示されます。 2 番目の部分はフォームとして保存されます。
フォーム ページをレンダリングするときは、外部キー関係を持つフォーム コントロールとフィールドを処理する方法を考慮する必要があります。フォーム コントロールは、text、text_date、text_datetime、textarea、select、radio、checkbox、file、hidden、address、custom などの型をサポートする必要があり、カスタム コントロールは FormControl クラスを継承する必要があり、カスタム コントロールのレンダリングは render メソッドによって完了します。コントロールの。フォームのレンダリングでは、補助読み込みに関連するフィールドを決定する必要があります。たとえば、post テーブルを編集する場合、post テーブルには category_id というフィールドがあり、これは記事の列 ID を表し、カテゴリ テーブルの id フィールドに対応します。現時点では、ユーザー入力を容易にするために、選択、ラジオ、およびチェックボックス コントロールを使用して category_id をロードする必要があります。たとえば、選択コントロールを使用する場合は、オプションの値として category.id を使用し、オプションのテキストとして category.name を使用する必要があります。これはユーザー入力を容易にするためにも行われます。この手順はリスト内の検索と共通しているため、コードを再利用できます。
フォームの保存では、一部のカスタム コントロールの保存を考慮する必要があります。カスタム コントロールの保存は、カスタム コントロール クラスの onSave メソッドによって完了します。フォームを保存するときは、リレーションシップの保存も考慮する必要があります。デフォルトでは、補助テーブルがカスケードで更新される必要があります。ユーザーが入力を完了して [保存] をクリックすると、フォーム フォームには次の手順が表示されます:
フィールドで構成された検証ルールに従って検証します。
List は、モジュール構成のフィールド構成に従ってページング データを表示するページング テーブルです。リストの検索、並べ替え、削除の確認、エクスポートなどの機能をサポートします。
第4章 DBuilder システムの実装
4.1 ディレクトリ構造
機能 |
| 資産||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
このディレクトリには、さまざまなフロントエンド リソースが保存されます。ブートストラップ、カスタム CSS ファイルおよび JS ファイルが含まれます。 |
| プラグイン||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
リッチ テキスト エディター、ビデオおよびオーディオ プラグインなどの特殊なフロントエンド プラグインを保存するディレクトリ。 |
| アプリ/コントローラー/管理者||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MVC のコントローラーを格納するディレクトリ。このうち、DBuilder の中核は admin ディレクトリにあります。 |
| アプリ/モデル||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MVCでモデルを保存するディレクトリ。データベースのクエリに使用されます。 |
| アプリ/ビュー||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MVC のビューを保存するディレクトリ。ファイル名の形式は *.blade.php です。 |
| アプリ/ライブラリ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PHP 補助クラスと PHP ライブラリを保存するディレクトリ。 |
| app/config/crud||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
モジュール設定が保存されるディレクトリ。 |
4.2 GModule設定ファイルGModule 設定ファイルは、GModule のパラメーターを定義します。このファイルは、GModule Name を蛇の形に分割して得られた文字列に基づいて名前が付けられた php ファイルです。 GModule が OrderItem の場合、GModule 設定ファイルは order_item.php になります)。構成パラメータは配列形式で返されます。 テーブルで表現される PHP 配列の美しさを考慮して、パラメーターは設定では Key=>Value の形式で、またドット形式の Key.Value で表現されます。 表 4-3 ルート構成
表 4-3 の各フィールドのフォーム構成の説明は、次の表に示すとおりです。 表 4-4 フィールド.フィールド名.フォームの構成
表 4-5 フィールド.フィールド名.リストの構成
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
3
2159
Google Chromeのモバイル版を表示する方法
こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?
から 2024-04-23 00:22:19
0
11
2310
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
1821
関連トピック
詳細>
|