PHP内容管理系统TEEBB的设计构思
摘要:嗨,昨天介绍了至文内容管理系统(TEEBB),点这里看昨天的内容,今天我们聊聊这个“东西”该怎么设计! 开发这个系统的初衷就是要“高扩展高灵活”,毕竟客户“巴巴”的需求各不相同。OK,废话不多说直接上结构图!
嗨,昨天介绍了至文内容管理系统(TEEBB),点这里看昨天的内容,今天我们聊聊这个“东西”该怎么设计!
开发这个系统的初衷就是要“高扩展高灵活”,毕竟客户“巴巴”的需求各不相同。OK,废话不多说直接上结构图!
如上图,我们把内容中相同的部分抽取为“字段”,根据功能不同暂归类为“常规字段”、“数值字段”、“引用字段”、“文本字段”。字段的详细介绍在这里。只要你想,你可以创建自己的“字段”! OK?
我们使用类型EntityType来对字段进行组合管理。可以根据功能分为不同的类型。如上图,TEEBB现内置了“内容类型”、“分类类型”、“评论类型”、“用户类型”,后续会在资料中讨论如何增加“表单类型”。
“内容类型(ContentEntityType)”:TEEBB的核心类型,我们添加的所有内容都基于内容类型,用于对所有内容进行管理。
“分类类型(TaxonomyEntityType)”:创建包含不同字段的分类类型,在内容类型中进行字段引用,通常用于内容分类管理。
“评论类型(CommentEntityType)”:创建包含不同字段的评论类型,在内容类型中进行字段引用,在前台页面根据引用的评论类型不同显示不同的评论表单。
“用户类型(UserEntityType)”:TEEBB中内置了唯一的用户类型(people),通常我们会固定用户(User)类的常用属性,比如:username、password、email等等,如果我们想动态增加用户的信息,在不修改数据库表的情况下,可以添加用户类型(people)的字段,以实现动态添加用户信息表单。“非常的方便!”
三、二、一、上类图!
这是一个简简简简简版的类关系图,省略了TaxonomyEntityType、CommentEntityType、UserEntityType的一些关系类及对应Controller类。
在TEEBB中每个类型EntityType都有对应的实体(Entity)类、实体类表单类型(FormType)、类型Controller,如上图ContentEntityType的实体类为Content、表单类为ContentFormType、Controller为ContentEntityTypeController。
实体Entity:用于ORM在数据库中存取数据。
类型FormType:各类型的实体Entity的表单。
类型Controller:为各类型的Router提供对应Action。
😭️Sorry!上图太过简略,我们可以发现:
1. 继承AbstractField可以自定义自己的“字段”,当然我们还要创建对应的FieldItem,FieldType,FieldConfiguration、FieldConfigurationType。
FieldItem:字段的Entity用于ORM对字段的数据进行存取。
FieldType:字段的表单类型,用于生成类型EntityType的表单时,动态添加的字段表单行。
FieldConfiguration:用于存储各字段的设置。
FieldConfigurationType:用于字段设置的表单类型。
2. 继承AbstractEntityType我们可以创建自定义的类型EntityType。我们还要创建对应的实体Entity,类型FormType,类型Controller 。
3. 如果你只是想让自己的网站内容更灵活,那就不需要考虑上文进行二次开发,在后台随意创建各种类型,添加字段,添加内容就好了。点这里试用DEMO!
这样的设计是不是就很灵活了呢?再加上Symfony的众多Bundle,这就很哇塞了!几乎想要什么功能都能很快的二次开发了吧?😄️😄️
OK,今天先到这里。下次继续补充!PEACE!