2008-12-22 104 views
1

我正在研究一個類似於項目的PHP CMS,我試圖找出處理PHP中CRUD功能的最便捷方式。PHP中的簡單/可重複使用的CRUD(無框架或大類)

CMS完全在程序PHP中編程(沒有OOP - 我知道你們許多人不會同意這一點......),並且設計的目的是保持一切儘可能的簡單和輕巧,並創建高度可重用的函數和代碼片段。

CMS允許根據需要安裝/激活多個模塊。這些模塊描述了不同類型的內容,所以我可能會最終得到像頁面,新聞,博客等等。

對於每種內容類型,我都必須創建CRUD操作,現在我試圖找到實現此目的的最便捷方法。

一個要求是這些內容類型中的每一個的表單都包含在一個外部文件中(對於插入和編輯)以及是否有某種方法可以將服務器端輸入驗證集成在一起。

回答

4

通過CRUD操作你的意思只是(乏味的)數據庫查詢?

您可以輕鬆地設置數據庫,以便除內容類型中的一些常見字段外,特定內容類型的所有數據都作爲序列化關聯數組存儲在TEXT字段中。

這樣,您只需要一組查詢就可以CRUD任何特定的內容類型,因爲傳遞給CRUD函數的數據只是盲目序列化的。

例如,假設我們聲明內容標題,創建/更新日期,標籤和簡短描述被視爲常見數據。從那裏我們有一個博客和一個頁面內容類型。

我可能會創建一個數據庫表這樣:

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參考表)

雖然該博客可能需要像數據「pingbacks」和頁面可能只需要存儲身體,您只需將類似以下示例的輸出存儲在博客中:

$data = serialize(array(
    "body" => "Lorem ipsum", 
    "pingbacks" => array() 
)); 

更新很簡單,只要您從數據庫中獲取數據,就可以將要編輯的數據反序列化爲基於內容類型選定的表單。顯示工作方式相同,只需根據內容類型獲取模板並將其發送到非序列化數據數組。模板永遠不用擔心數據如何存儲,只需要獲取$ data ['pingbacks']。

至於你的表格,我的建議是打破你的反OOP盟約,找到一個表格生成庫。如果你可以從框架中提取它,使用Zend_FormZend_ConfigZend_ValidateZend Framework(在這種情況下所有Zend_Config相當於加載和遍歷XML和INI文件的便利接口)使生活真的很好。您可以讓XML文件爲每種內容類型定義表單,並且只需在頁面上呈現表單(根據內容類型獲取XML),獲取過濾的數據,刪除「常見字段」名稱,創建/更新日期,然後序列化剩下的內容到數據庫中。不需要特定內容類型的模式知識(除非你希望是嚴格的)。

儘管作爲個人,我會強烈建議您考慮抓取Zend_Form(使用Zend_Validate和Zend_Config)以及使用Doctrine作爲ORM /數據庫抽象層。您可能會發現至少Doctrine會讓您的生活在數據庫上運行時變得更加輕鬆。

1

雖然作爲個人一邊我會強烈建議你看看抓Zend_Form的(與Zend_Validate的和Zend_Config的),以及使用Doctrine作爲ORM /數據庫抽象層。您可能會發現至少Doctrine會讓您的生活在數據庫上運行時變得更加輕鬆。

我同意dcousineau。爲什麼在已經完成的時候推出自己的產品?我也會看看Zend DB,如果你需要一個PHP4和5的解決方案PHP ADOdb

我最近開始了一個學術項目,和你有同樣的願望;最終我使用了PHP ADoDB。

+0

PHP ADOdb不是那種夢幻般的伴侶。 – kta 2013-10-11 13:38:31

0

我建議www.ajaxcrud.com - 它很容易使用,輕量級,並讓你在幾秒鐘內啓動並運行。

+0

與f0ska的答案相同:您在推薦您自己的商業產品時未透露此事實。 – 2016-05-19 22:20:37

0

你可以試試這個:http://xcrud.com,真的有幫助

+0

嗯,它肯定對你有幫助,因爲它是你銷售的產品。 – 2016-05-19 22:20:04