質問
それぞれに共通の関数を記述する簡単な方法はありますか? CRUD (create, retreive, update, delete)
での操作 PHP
フレームワークを一切使用せずに。たとえば、テーブル名とフィールド名をパラメータとして受け取り、データを mySQL database
. 。もう 1 つの要件は、関数が結合をサポートできる必要があることです。必要に応じて複数のテーブルにデータを挿入できる必要があります。
これらのタスクはフレームワークを使用して実行できることはわかっていますが、さまざまな理由から (ここで説明するには長すぎます)、フレームワークを使用できません。
解決
私がこれを書いたのは、いわば磨き上げられた足場のようなものです。これは基本的に、使用するテーブル、フィールド名と型を含む配列、およびアクションをコンストラクターが受け取るクラスです。このアクションに基づいて、オブジェクトはそれ自体のメソッドを呼び出します。例えば:
これは私が渡す配列です:
$data = array(array('name' => 'id', 'type' => 'hidden')
, array('name' => 'student', 'type' => 'text', 'title' => 'Student'));
次に、コンストラクターを呼び出します。
new MyScaffold($table, 'edit', $data, $_GET['id']);
上記の場合、コンストラクターは「edit」メソッドを呼び出します。このメソッドは、$table のデータを表示するフォームを表示しますが、配列内に設定したフィールドのみを表示します。使用するレコードは $_GET メソッドによって決定されます。この例では、「student」フィールドはテキスト ボックスとして表示されます(したがって、「text」タイプ)。「タイトル」は単に使用されるラベルです。「非表示」であるため、ID フィールドは編集用に表示されませんが、プログラムでは使用できます。
「edit」の代わりに「delete」を渡した場合、GET 変数からレコードが削除されます。テーブル名のみを渡した場合、デフォルトでは編集、削除、新規のボタンを備えたレコードのリストが表示されます。
これは、多くのカスタマイズ機能を備えたすべての CRUD を含む 1 つのクラスにすぎません。必要に応じて複雑にすることも、単純にすることもできます。これをジェネリック クラスにすることで、任意のプロジェクトにドロップして、命令、テーブル情報、構成情報を渡すだけで済みます。あるテーブルでは、スキャフォールドを介して新しいレコードが追加されることを許可したくない場合があります。この場合は、パラメーター配列で "newbutton" を false に設定します。
従来の意味でのフレームワークではありません。すべてを内部で処理する単なるスタンドアロン クラスです。これにはいくつかの欠点があります。重要なのは、すべてのテーブルに「id」と呼ばれる主キーが必要であることです。これをなくても問題は解決できますが、問題が複雑になります。もう 1 つは、管理する各テーブルに関する情報を詳細に記述した大きな配列を準備する必要がありますが、これは 1 回だけ行う必要があります。
このアイデアに関するチュートリアルについては、を参照してください。 ここ
他のヒント
このような関数を作成しようとすると、さらに別のフレームワークを実現したことにすぐに気づくでしょう。
もちろんそうではありません。だからこそ、これらのフレームワークが存在し、粗雑な機能を実装しています。私はまず、既存のフレームワークを実際に使用するよう説得しようとします。次に、上記のフレームワークが失敗した場合、そのうちの 1 つまたは 2 つを検討し、実装のアイデアをコピーします。検討できることすべてに失敗した http://www.phpobjectgenerator.com/
私はあなたの気持ちを知っています。
Pork.DbObject は、オブジェクトを拡張できる単純なクラスです。動作するには db 接続クラスが必要なだけです。
チェックしてください:www.schizofreend.nl/pork.dbobject/
(そうそう、yuk @ php オブジェクト ジェネレーター。 膨張警報! すべてのクラスにそのようなカスタム関数を入れたい人がいるでしょうか?)
時間に追われない限り、CRUD を実現する独自の関数を作成するべきだと思います。それ自体はフレームワークかもしれませんが、フレームワークを叫ぶ前に、そのフレームワークが何をするのかを学ぶ必要があります。また、フレームワークのバグを簡単に見つけて自分で修正できるため、これらのことを知っておくと便利です。 ....
しばらく前にSOでこの質問に遭遇しましたが、その時点ではこれを軽量の方法で行うものは何も見つかりませんでした。
結局自分で書くことになり、他の人が役立つかもしれないと思って、最近それをオープンソース (MIT ライセンス) することにしました。Github にアップされているので、自由にチェックして、ニーズに合う場合は使用してください。
https://github.com/ArthurD/php-crud-model-class
うまくいけば、何らかの用途が見つかると思います。改善や貢献も期待していますので、お気軽にプル リクエストを送信してください。:-)
可能ですが、お勧めしません。
フレームワークを使用する方法がまったくない場合は、他のすべてのモデル オブジェクトを拡張する基本クラスを作成できます。その後、基本クラスに、以下に基づいて SQL を生成および実行させることができます。 get_class()
そして get_class_vars()
.
出来ますか?はい。
お勧めしますか?いいえ