PHP のシンプルで再利用可能な CRUD (フレームワークや大きなクラスはありません)
-
23-08-2019 - |
質問
私は PHP CMS のようなプロジェクトに取り組んでおり、PHP の CRUD 機能を処理する最も便利な方法を見つけようとしています。
CMS は完全に手続き型 PHP でプログラムされており (OOP はありません - これに同意されない方も多いと思います...)、すべてを可能な限りシンプルかつ軽量に保ち、再利用性の高い関数とコード スニペットを作成するように設計されています。 。
CMS を使用すると、必要に応じて複数のモジュールをインストール/アクティブ化できます。これらのモジュールはさまざまな種類のコンテンツを説明するため、いくつか例を挙げると、おそらくページ、ニュース、ブログなどのコンテンツが作成されることになります。
このコンテンツ タイプごとに CRUD 操作を作成する必要があります。現在、これを実現する最も便利な方法を見つけようとしています。
要件の 1 つは、これらのコンテンツ タイプのそれぞれのフォームが単一の外部ファイル (挿入と編集の両方) に含まれていることと、サーバー側の入力検証を統合する何らかの方法があれば、それがプラスになることです。
解決
CRUD 操作とは、(面倒な) データベース クエリだけを意味しますか?
コンテンツ タイプ間のいくつかの共通フィールドを除いて、特定のコンテンツ タイプのすべてのデータがシリアル化された連想配列として TEXT フィールドに格納されるようにデータベースを簡単にセットアップすることもできます。
この方法では、CRUD 関数に渡されるデータは盲目的にシリアル化されるだけなので、特定のコンテンツ タイプを CRUD するのに必要なクエリは 1 セットだけです。
たとえば、コンテンツのタイトル、作成/更新日、タグ、短い説明を共通データとみなすと宣言するとします。そこから、ブログとページ コンテンツ タイプが作成されます。
おそらく次のようにデータベーステーブルを作成します。
CREATE TABLE `content` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR NOT NULL,
`short_description` TEXT NOT NULL,
`tags` TEXT ,
`data` TEXT ,
`content_type` INT NOT NULL,
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
(先に進んで、content_type の参照テーブルを作成すると仮定します)
また、ブログには「ピンバック」などのデータが必要で、ページには本文のみが必要な場合がありますが、ブログの場合は、次の例のような出力を保存するだけです。
$data = serialize(array(
"body" => "Lorem ipsum",
"pingbacks" => array()
));
更新は簡単です。データベースからデータを取得するたびに、コンテンツ タイプに基づいて選択されたフォームに編集するためにデータをシリアル化解除します。表示も同様に機能します。コンテンツ タイプに基づいてテンプレートを取得し、シリアル化されていないデータ配列を送信するだけです。テンプレートは、$data['pingbacks'] を取得するだけで、データの保存方法を気にする必要はありません。
フォームに関しては、反 OOP 規約を破棄し、フォーム生成ライブラリを見つけることをお勧めします。フレームワークから抽出できる場合は、次を使用します。 Zend_Form と Zend_Config そして Zend_Validate から Zend フレームワーク (この状況でのすべての Zend_Config は、XML および INI ファイルをロードおよびトラバースするための便利なインターフェイスです) は、生活を本当に快適にします。XML ファイルに各コンテンツ タイプのフォームを定義させることができ、ページ上にフォームをレンダリングし (コンテンツ タイプに基づいて XML を取得)、フィルタリングされたデータを取得し、次のような「共通フィールド」を削除するだけです。名前、作成/更新日、その後、データベースに残ったものをシリアル化します。特定のコンテンツ タイプのスキーマの知識は必要ありません (厳密に知りたい場合を除く)。
個人的な余談ですが、使用するだけでなく Zend_Form (Zend_Validate と Zend_Config を使用) を取得することを検討することを強くお勧めします。 教義 ORM/データベース抽象化レイヤーとして。データベース上で操作を実行する場合、少なくとも Doctrine を使用すると作業がはるかに楽になることに気づくかもしれません。
他のヒント
はさておき、個人として、私は非常にあなたが(Zend_ValidateにとのZend_Config付き)Zend_Formのをつかむだけでなく、ORM /データベース抽象化レイヤとしてDoctrineを使うに見ることをお勧めしますが。あなたはそれがデータベース上で操作を実行することになると、少なくともDoctrineはそんなに簡単にあなたの人生を作ることに気づくかもしれません。
私はdcousineauに同意します。それはすでに行われていますのに、なぜ独自のロール?私はまた、 ZendのDB のを見ているだろう、とあなたが必要な場合はPHP4と5溶液 PHPのADOdb の
私は最近、学術的なプロジェクトを開始し、あなたと同じ願望を持っていました。最終的に私はPHP ADODBで行きました。
私はwww.ajaxcrud.com示唆しています。
あなたはこれを試すことができます: http://xcrud.com に、本当に参考になっ