我正在开发一个类似 PHP CMS 的项目,我试图找出处理 PHP 中 CRUD 功能的最方便的方法。

CMS 完全使用过程 PHP 进行编程(没有 OOP - 我知道你们中的许多人不会同意这一点...),并且设计使一切尽可能简单和轻便,并创建高度可重用的函数和代码片段。

CMS 允许根据需要安装/激活多个模块。这些模块描述了不同类型的内容,因此我最终可能会得到诸如页面、新闻、博客之类的内容,仅举几例。

对于每种内容类型,我都必须创建 CRUD 操作,现在我正在尝试找到最方便的方法来实现此目的。

一个要求是每种内容类型的表单都包含在单个外部文件中(用于插入和编辑),并且如果有某种方法可以集成服务器端输入验证,那将是一个优势。

有帮助吗?

解决方案

您所说的 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_Validate 来自 Zend框架 (在这种情况下,Zend_Config 相当于一个加载和遍历 XML 和 INI 文件的便捷接口)让生活变得非常美好。您可以让 XML 文件为每种内容类型定义表单,您所需要做的就是在页面上呈现表单(根据内容类型获取 XML),获取过滤后的数据,删除“公共字段”,例如名称、创建/更新日期,然后将剩下的内容序列化到数据库中。不需要了解特定内容类型的架构(除非您希望严格)。

尽管就个人而言,我强烈建议您考虑使用 Zend_Form (使用 Zend_Validate 和 Zend_Config)以及使用 教义 作为 ORM/数据库抽象层。您可能会发现,在数据库上运行操作时,Doctrine 至少会让您的生活变得更加轻松。

其他提示

  

虽然作为个人一边我会强烈建议你看看抓Zend_Form的(与Zend_Validate的和Zend_Config的),以及使用Doctrine作为ORM /数据库抽象层。当涉及到数据库上运行的操作您可能会发现,至少有学说将使你的生活变得更轻松。

我同意dcousineau。为什么当它已经完成推出自己的?我还要看看 Zend的DB ,如果你需要一个PHP4和5溶液 PHP ADOdb中

最近,我开始一个学术项目,并有同样的愿望你;最后我去与PHP ADODB。

我建议www.ajaxcrud.com - 它很容易使用,重量轻,让您能在几秒钟内运行。

您可以试试这个: http://xcrud.com ,真正的帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top