PHP中的简单/可重用CRUD(无famework或大型类)
我正在从事一个类似于PHPCMS的项目,我试图找出在PHP中处理CRUD功能最方便的方法 CMS完全是用过程化PHP编程的(没有OOP——我知道你们中的许多人都不会同意这一点……),它的设计使一切尽可能简单明了,并创建高度可重用的函数和代码片段 CMS允许根据需要安装/激活多个模块。这些模块描述了不同类型的内容,所以我可能最终会有一些页面、新闻、博客等等 对于每种内容类型,我都必须创建CRUD操作,现在我正试图找到最方便的方法来实现这一点PHP中的简单/可重用CRUD(无famework或大型类),php,crud,code-reuse,Php,Crud,Code Reuse,我正在从事一个类似于PHPCMS的项目,我试图找出在PHP中处理CRUD功能最方便的方法 CMS完全是用过程化PHP编程的(没有OOP——我知道你们中的许多人都不会同意这一点……),它的设计使一切尽可能简单明了,并创建高度可重用的函数和代码片段 CMS允许根据需要安装/激活多个模块。这些模块描述了不同类型的内容,所以我可能最终会有一些页面、新闻、博客等等 对于每种内容类型,我都必须创建CRUD操作,现在我正试图找到最方便的方法来实现这一点 一个要求是,这些内容类型的表单都包含在单个外部文件中(用
一个要求是,这些内容类型的表单都包含在单个外部文件中(用于插入和编辑),如果有某种方式集成服务器端输入验证,这将是一个加号。CRUD操作指的是(繁琐的)数据库查询吗 您可以同样轻松地设置数据库,以便除内容类型中的几个公共字段外,特定内容类型的所有数据都存储为文本字段中的序列化关联数组 这样,您只需要1组查询就可以对任何特定的内容类型进行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\u类型创建引用表)
虽然博客可能需要“pingbacks”之类的数据,而页面可能只需要正文,但您只需要为博客存储以下示例的输出:
$data = serialize(array(
"body" => "Lorem ipsum",
"pingbacks" => array()
));
更新很容易,只要从数据库中获取数据,就可以取消序列化数据,以便编辑到基于内容类型选择的表单中。显示的工作原理相同,只需根据内容类型获取模板并将其发送到未序列化的数据数组。模板永远不需要担心数据是如何存储的,只需要得到$data['pingbacks']
至于你的表单,我的建议是打破你的反OOP约定,找到一个表单生成库。如果您可以从框架中提取它,那么使用with和from(在这种情况下,所有Zend_配置都是一个加载和遍历XML和INI文件的方便接口)会让生活变得非常美好。您可以让XML文件为每种内容类型定义表单,您所要做的只是在页面上呈现表单(根据内容类型获取XML),获取过滤后的数据,删除诸如名称、创建/更新日期等“公共字段”,然后将剩余内容序列化到数据库中。不需要了解特定内容类型的模式(除非您希望严格要求)
尽管从个人角度来说,我强烈建议您考虑使用Zend_表单(使用Zend_验证和Zend_配置)以及作为ORM/数据库抽象层。您可能会发现,至少在数据库上运行操作时,条令会使您的生活变得更加轻松。CRUD操作指的是(繁琐的)数据库查询吗 您可以同样轻松地设置数据库,以便除内容类型中的几个公共字段外,特定内容类型的所有数据都存储为文本字段中的序列化关联数组 这样,您只需要1组查询就可以对任何特定的内容类型进行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\u类型创建引用表)
虽然博客可能需要“pingbacks”之类的数据,而页面可能只需要正文,但您只需要为博客存储以下示例的输出:
$data = serialize(array(
"body" => "Lorem ipsum",
"pingbacks" => array()
));
更新很容易,只要从数据库中获取数据,就可以取消序列化数据,以便编辑到基于内容类型选择的表单中。显示的工作原理相同,只需根据内容类型获取模板并将其发送到未序列化的数据数组。模板永远不需要担心数据是如何存储的,只需要得到$data['pingbacks']
至于你的表单,我的建议是打破你的反OOP约定,找到一个表单生成库。如果您可以从框架中提取它,那么使用with和from(在这种情况下,所有Zend_配置都是一个加载和遍历XML和INI文件的方便接口)会让生活变得非常美好。您可以让XML文件为每种内容类型定义表单,您所要做的只是在页面上呈现表单(根据内容类型获取XML),获取过滤后的数据,删除诸如名称、创建/更新日期等“公共字段”,然后将剩余内容序列化到数据库中。不需要了解特定内容类型的模式(除非您希望严格要求)
尽管从个人角度来说,我强烈建议您考虑使用Zend_表单(使用Zend_验证和Zend_配置)以及作为ORM/数据库抽象层。您可能会发现,至少在数据库上运行操作时,条令会让您的生活变得更加轻松
尽管从个人角度来说,我强烈建议您考虑使用Zend_表单(使用Zend_验证和Zend_配置)以及使用条令作为ORM/数据库抽象层。你可能会发现