PHP中的简单/可重用CRUD(无框架或大类)

时间:2008-12-22 17:38:02

标签: php crud code-reuse

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

CMS完全采用程序化PHP编程(没有OOP - 我知道很多人都不同意这一点......)并且设计的目的是让所有内容尽可能简单明了,并创建高度可重用的功能和代码片段。

CMS允许根据需要安装/激活多个模块。这些模块描述了不同类型的内容,所以我可能最终会得到一些类似页面,新闻,博客的内容。

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

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

4 个答案:

答案 0 :(得分: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_Form Zend_ConfigZend_Validate中的Zend Framework(在这种情况下所有Zend_Config数量都是一个方便的加载和遍历接口XML和INI文件)让生活变得非常好。您可以让XML文件为每种内容类型定义表单,而您只需在页面上呈现表单(根据内容类型获取XML),抓取过滤后的数据,删除“常用字段”,如名称,创建/更新日期,然后将剩下的内容序列化到数据库中。不需要了解特定内容类型的模式(除非您希望严格)。

虽然作为个人的一边,我强烈建议你研究一下使用Zend_Form(使用Zend_Validate和Zend_Config)以及使用Doctrine作为ORM /数据库抽象层。您可能会发现,至少在运行数据库操作时,Doctrine会让您的生活变得更加轻松。

答案 1 :(得分:1)

  

虽然作为个人的一边,我强烈建议你研究一下使用Zend_Form(使用Zend_Validate和Zend_Config)以及使用Doctrine作为ORM /数据库抽象层。您可能会发现,至少在运行数据库操作时,Doctrine会让您的生活变得更加轻松。

我同意dcousineau。为什么在它已经完成时自己滚动?我还要看看Zend DB,如果你需要一个PHP4和5解决方案PHP ADOdb

我最近开始了一个学术项目并和你一样渴望;最后我选择了PHP ADoDB。

答案 2 :(得分:0)

我建议www.ajaxcrud.com - 它易于使用,轻巧,让您在几秒钟内启动并运行。

答案 3 :(得分:0)

你可以试试这个:http://xcrud.com,非常有用