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_Config和Zend_Validate来自Zend Framework(在这种情况下,所有 Zend_Config 相当于一个方便的接口来加载和遍历 XML 和 INI 文件)让生活变得非常美好。您可以让您的 XML 文件为每种内容类型定义表单,您所要做的只是在页面上呈现表单(根据内容类型获取 XML),获取过滤后的数据,删除“通用字段”之类的名称,创建/更新日期,然后将剩余的内容序列化到数据库中。不需要了解特定内容类型的架构(除非您希望严格)。
尽管从个人角度来说,我强烈建议您考虑使用 Zend_Form(使用 Zend_Validate 和 Zend_Config)以及使用Doctrine作为 ORM/数据库抽象层。您可能会发现,在数据库上运行操作时,至少 Doctrine 会让您的生活变得更加轻松。