CMS-CMS框架解析

0 篇文章 0 订阅
订阅专栏

        今天第一次接触到CMS的项目,当时是修改一个别人项目的BUG,说实话,我开始并不了解这是一个开源框架,我开始以为是一个别人字节写的自用框架,而非公共的开源框架。其实本人也写过微框架,本次就借助CMS来谈谈框架的思想。

 框架的本质

     框架的本质,自我理解就是从URL输入到数据处理到数据输出的过程,如果输出的是页面HTML则是传统的MVC模式,如果输出的是JSON的数据集合则是接口模式。如果细分的话,框架本人认为有一下流程。

     框架处理流程: 用户输入URL->rewrite等操作将URL导入到入口文件index.php->预设常量->解析URL生成路由(伪静态实现的地方),从路由中分解出控制器和方法->类的自动载入实现->调用控制器->控制器调用服务->服务调用model->控制器获取数据->控制器包含HTML文件(这一步可以实现页面缓存)->正则匹配将HTML文件中的变量和表达式转换为PHP的语法(前端模板,如blade和smarty)->生成纯HTML页面->返回给浏览器->浏览器渲染

框架生命流程

一. 第一步,用户输入URL

     1. 格式1:http://www.jianzhu.com/index.php/index/index?a=1&b=3或 http://www.jianzhu.com/index/index?a=1&b=3

      2.格式2: http://www.jianzhu.com/index.php?m=Index&a=hello&param1=1&param2=2

       第二种格式比较简单,获取所有的参数,URL2中的?后的参数通过GET传输,会放置在GET全局参数变量中,从GET['m']和$_GET['a']获取参数,并认为m是控制器,如m=index,a=hello则表示IndexController控制器的hello方法。参数为param1和param2。这样很容易解析成路由,但无法再方法中注入参数,不在本次的讨论范围之内。本文只讨论第一种样式

三.将路由转到入口文件index.php

          该入口文件一般放在服务器设定的项目根目录中的public文件下,通常是index.php。路由 http://www.jianzhu.com/index/index?a=1&b=3,此种路由没有显示导入index.php,可以使用apache的.htacess转写RewriteRule ^(.*)$ index.php/$1 [L],或者nginx的try_file转写到 http://www.jianzhu.com/index.php/index/index?a=1&b=3路由,这样就进入了入口文件,此种做法也叫路径优化,让index.php变得不可见,当然你显示输入路径也是OK的。

四.预设常量

这里一般会预设一些常量和全局配置操作,以CMS举例,在入口文件中预设了基本的路径和配置了utf8编码

     1. 预设路径常量

        

 2. 加载配置

    

3. 调用核心框架文件

该文件在LARAVEL中式实例化了一个容器对象,在CMS中是实例化了一个cpApp文件,由于此时尚未写PHP自动载入函数,一般该自动载入函数写在基础容器对象中。所以在new出容器对象的时候,要显示引入cpApp.class.php文件

   

     注意:涉及到的路径的服务器常量

     以 http://www.jianzhu.com/index.php/index/index?a=1&b=3举例    

其中要注意的的变量是

     QUERY_STRING:查询字符串,即问号'?'之后的字符串

     SCRIPT_NAME:脚本名字,即入口脚本的名字为index.php

     PHP_SELF:即端口后的,问号之前的路径,要和SCRIPT_NAME相互区分

     REQUEST_URI:全路径,即端口后面的所有路径,包含问号后的参数

     PATH_INFO :即问好之前端口之后,取出掉SCRIPT_NAME的路径   

好了,现在我们总结下,CMS的入口文件都干了什么

 

 

1行设置了编码方式为utf-8,

2行设置了时区

4-13行获取去除参数的路径REQUEST_URI,即端口后,问号前的内容

16行定义核心框架目录

17行引入了框架的核心处理类

21到34行,将路由中的语言方式解析出来,术语叫国际化即可以编写中文版本和英文版本的文字。处理的方式是将语言的标识写在REUQEST_URI中,然后再语言目录中匹配如果是中文就取中文zh下面的配置,该配置控制某些按钮或者文档的显示,如果是英文获取英文的配置,配置如下

,如果匹配到了,然后将语言标识从REQUEST_URI中替换掉,则现在的REQUEST_URI中午语言标识了。

35行定义匹配到的语言常量,可能是英文也可能是中文

38到46行定义手机常量

48-49行设置自定义目录,其实如果我写肯定不这么写,我可以在这里定义根目录为顶层文件夹的目录

58-60行实例化了容器对象cpApp,初始化了语言及配置,然后运行了容器对象的run方法。

 

五,解析URL生成控制器和方法

    现在我们进入容器类cpApp类,我们可以看到,其首先定义了模块和名称的静态变量,本质是为了解析出控制器和相应的方法,

然后到了构造函数,在构造函数中定义了一些常量和设置了配置信息

 

从13行中我们可以看到该CMS有个默认配置文件,该文件cpConfig.php设置了APP,DB和模板TPL的默认配置,然后将这些配置塞到静态数组中,并定义了GET和SET方法来获取这些参数。这里巧妙的应用了array_merge来覆盖配置,即如果用户在配置文件cpConfig.class.php文件中配置了自定义配置,则会覆盖了系统的默认配置。

该控制器中有个自动加载函数可以从中看出,本核心类中实现了自己的自动加载算法,28到35行是引入了一些系统内置处理函数。怎么样有没有像LARAVEL的bootstap文件中干的内容。看看自动加载的写法

可以看出,这里其实很简单,将几个大文件夹中的路径的文件全部引入进来。并且这些文件都以类名+".class.php"组合而成,这种写法其实很low没有用到命名空间,而且PSR的写法是配置一个顶层的命名空间对应的目录,然后后续的目录和剩下的命名空间对应,然后类文件是以类名+'.php'的形式命名的。从中可以看出这个CMS版本是很老的,而且命名也不遵守PSR规范。

我们接着看run函数都干了什么

     

这个方法究竟干了什么呢,从中我们知道干了以下的事情

43到54行是解析出来了路由,并将路由塞到GET全局数组中,如果路由不存在就使用默认路由,这个就是从REQUEST_URI中按照一定规则解析出控制器、方法和参数,由于实现比较简单,这里就不描述了

 

这里没什么好说的,唯一可以说的是伪静态的处理方式,这里可以看出90到111行就是从完整的REQUEST_URI包含了?后面的参数中去除了后面的参数,并将其变成参数,然后去除了脚本文件大部分是index.php获取了不包含参数和脚本路径的纯路径,在这个纯路径的最后会加入一些如.HTML的标识,用以迷惑用户,以让其认为这是个静态文件,例如这里的路由 http://www.jianzhu.com/index.php/index/index.html?a=1&b=3,最后的index.html中的.html是伪静态标识在纯路径的最后,是可以配置的,其实本质是indexController的index方法,在解析路由的时候用了增加一个后缀的小技巧,就生成了伪静态,可以看出这里处理伪静态的方法是在路由解析中实现的。

56到59行加载了初始化程序

61行预定义了一些常量

64到70行 查看了控制器module是否存在,即控制器是否存在

73到75行读取该控制器该方法的缓存,如果没有缓存则执行该控制器的方法excute

78行然后调动结束前的回调函数。

由于这里内容很多,这里就讲excute方法,里面就是判断了下控制器存不存在,方法存不存在,如果存在就调用该控制器的该方法,如果开启了缓存,则将该方法生成的页面转换为缓存页面。实现比较简单这里就不描述了

这里将读入写入缓存的操作单独分出了一个缓存类来实现。类名cpHtmlCache用该类来读写缓存,具体内容参见CMS的该类

该类功能概括下就是,将方法获取的内容写入到缓存文件中,取得时候从缓存文件中取,可以清空删除缓存文件,在取的时候通过缓存文件的创建时间和当前时间来判断缓存文件有无过期。

今天就讲到这里,剩下的就是CMS调用数据model类的实现了,这个后续再谈。

什么是CMS(内容管理系统)?
cunjiu9486的博客
10-13 5831
Content Management System or CMS is a software that is used to create, edit, update web content easily. In the old days, web contents were simple static HTML, CSS, and JavaScript pages where the conte...
djangocms-installer:控制台向导,用于引导django CMS项目
02-04
Django CMS是一款功能强大的开源内容管理系统,基于Python和Django框架构建。它提供了丰富的功能,如多语言支持、拖放页面编辑、自定义模板、插件系统等,使得非程序员也能轻松管理网站内容。Django CMS的灵活性和可...
CMS框架
weixin_44574152的博客
07-23 1886
文章为转发 作为新手我一直不了解什么是CMS框架的区别,刚好最近学习到了ThinkPHP,就找了这篇文章。很多人学了许久的PHP,但对于框架CMS的认识比较模糊。 这个其实很重要,应该全面而清晰的认识。 1 . 各自代表 框架代表:ThinkPHP(简称TP,以及它的最新版TP5),Laravel,YII,CI,… CMS:Content Management System:内容管理系统;代表有:PHPCMS,dedecms,phpMyWind,帝国CMS,Ecshop,ECMall,Discuz,PH
SpringCloud微服务架构前后端分离项目实践
weixin_50196917的博客
06-07 4901
一款 Java 语言基于 SpringCloud、Vue、ElementUI、MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题的个性化呈现的需
【全开源】CMS内容管理系统源码(ThinkPHP+FastAdmin)
最新发布
2401_84413757的博客
05-27 827
未来,我们可以期待更多创新功能和技术的加入,如人工智能、大数据分析和云计算等,为内容管理带来更多的便利和可能性。CMS(Content Management System)内容管理系统作为管理网站内容的重要工具,能够帮助用户高效、便捷地创建、编辑、发布和管理网站内容。降低运营成本:采用CMS内容管理系统源码,企业无需投入大量的人力和物力资源进行网站内容的维护和管理。企业官网:企业可以利用CMS内容管理系统源码构建自己的官方网站,发布企业介绍、产品展示、新闻动态等内容,提升企业形象和知名度。
CMS是什么?好的网站后台有什么特质?
昔明日
03-08 4666
CMS是什么?中文翻译是「内容管理系统」,就是大家常说的「网站后台」,从网站特定网址登入帐密后可以管理网站内容,使用者不需要懂网页设计,不需要懂程式,只要准备好网站的文字、图片就能把资料更新到网站,成功网站需要一个完整好用的CMS,如果网站后台不好用,必须花很多时间上架网站内容,后台又缺乏「SEO自动化」,那管理网站内容一定没有效率,重视网站管理系统的不断升级与优化才能提升SEO效率。
BaserCMS: 功能强大的PHP CMS框架
gitblog_00085的博客
03-18 385
BaserCMS: 功能强大的PHP CMS框架 项目地址 Basercms是一个基于PHP的开源内容管理系统(CMS框架。它提供了一套完整的开发工具,可以轻松地创建出高性能、易于维护的网站。 什么是BaserCMS? BaserCMS是一个轻量级且功能丰富的PHP CMS框架。它采用MVC(模型-视图-控制器)架构设计,支持多种数据库系统,并内置了丰富的插件和主题,可以帮助开发者快速构建各种类...
lin-cms-koa:使用Node.JS KOA构建的CMS开发框架
02-03
cms-koa(当前示例工程):0.3.9 核心库(lin-mizar):0.3.8文档地址在线演示免费入门视频教程QQ交流群QQ群号:643205479/814597236微信公众号微信搜索:林间有风版本日志最新版本0.3.90.3.9 F修复记录器第二次模板...
cms -spring-mybatis框架权限管理系统
06-14
"cms -spring-mybatis框架权限管理系统" 这个标题表明我们讨论的是一个基于CMS(内容管理系统)的软件项目,该系统采用了Spring和MyBatis这两个流行的Java框架来实现。Spring是一个全面的后端开发框架,提供依赖注入...
cms-site-resources:Core CMS网站的每站点资源(样式表,脚本,代码段等)
04-13
这个资源库基于Django CMS框架,支持HTML的页面构建,并且有良好的版本控制,方便团队协作和项目维护。对于开发者来说,这个资源库不仅可以加快开发速度,还能确保网站的统一性和专业性。同时,通过访问和利用这个...
CMS-Kominfo-Garut
03-31
为了充分利用这个系统,你需要熟悉PHP基础,理解MVC(Model-View-Controller)模式,以及可能涉及到的框架或库,如Laravel、Symfony或CodeIgniter。如果你需要进行二次开发,学习如何调试、测试和优化PHP代码也是很...
框架cms的区别
山兔的博客
04-27 320
框架是工具,cms是软件,cms直接启动就可以用了,而框架还需要开发人员继续写代码,完善它。
2021 年 15 个受欢迎的 CMS 平台(比较)
WP站长
11-05 9526
您是否想知道使用什么 CMS 平台来构建您的网站? CMS(内容管理系统)平台可让您轻松创建网站,而无需了解任何代码(至少对大多数代码而言)。有很多 CMS 选项可用,这意味着您可能很难选择最适合您需求的 CMS。 在本文中,我们将解释为什么为您的网站选择合适的 CMS 平台如此重要。我们还将分享我们对最佳 CMS 平台的首选以及比较。 目录 什么是CMS平台? 如何为您的网站选择最佳的 CMS 平台 1. WordPress.org 2. HubSpot CMS 中心 3. Joomla.
基于SSM框架CMS内容管理系统的设计与实现
GitHub质检员
02-18 1013
在这个网络高速发展的时代,互联网已经是近代生活的必需品,而且数据在数据量越来越多的网络时代,如何处理大量的数据也是当前互联网的核心,因此内容管理系统便变得更为重要。内容管理系统不仅仅是具备一个管理和上传功能,为了用户体验,在系统与用户之间更好的进行交互也是一个要点。用户如何对实时的信息进行一系列的操作,也是当前的一个难点。当前的时代,不夸张的说,只要你接触互联网,你都会接触到内容管理系统,所以说此系统的重要性是不能忽视的。人们使用内容管理系统一是简单,二是实时。
slimcms框架使用说明
zhucy的专栏
02-06 1108
slimcms框架使用说明
CMS详解
weixin_45511599的博客
06-29 3027
以获取最短回收停顿时间为目标场景:目前很大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上,这类应用通常都会较为关注服务的响应速度,希望系统停顿时间尽可能短,以给用户带来良好的交互体验。CMS收集器就非常符合这类应用的需求特点: 针对老年代 采用标记-清除法清除垃圾; 基于"标记-清除"算法(不进行压缩操作,产生内存碎片); 以获取最短回收停顿时间为目标优点: 并发收集、低停顿 垃圾收集线程与用户线程(基本上)可以同时工作缺点: 1.对CPU资源非常敏感 因为并发标记和并发清除都是和
推荐一款强大的PHP CMS框架:ThinkCMS-Auth
gitblog_00099的博客
04-03 394
推荐一款强大的PHP CMS框架:ThinkCMS-Auth 项目地址:https://gitcode.com/zouxiang0639/thinkcms-auth ThinkCMS-Auth 是一个基于 Laravel 框架开发的内容管理系统(CMS),它提供了一套完整的权限管理解决方案,对于开发者来说,无论是构建企业网站还是进行复杂的数据管理,都是一个高效而灵活的选择。 项目概述 ThinkC...
CMS介绍
看水不是水
11-02 6781
介绍: CMS(ConcurrentMarkSweep)收集器是一种以获取最短回收停顿时间为目标的收集器。 场景:目前很大一部分的Java应用集中在互联网网站或者基于浏览器的B/S系统的服务端上,这类应用通常都会较为关注服务的响应速度,希望系统停顿时间尽可能短,以给用户带来良好的交互体验。CMS收集器就非常符合这类应用的需求。 原理: 从名字(包含“MarkSweep”)上就可以看出CMS收集器是基于标记-清除算法实现的,它的运作过程相对于前面几种收集器来说要更复杂一些,整个过程分为四个步骤,包括:
开源免费cms---十大主流建站的CMS系统介绍
热门推荐
songbai220
12-13 2万+
开源免费cms建站系统哪个好(十大主流建站的CMS系统介绍) 动易 CMS,博客系统 drupal 不适合中国的企业网站建设。 joomla! drupal适合程序员级别的人使用,方便做二次开发,可以做出任何你想要的网站(当然这网站最好是面向国外用户的),中文则难说(主要原因还是在于模板,很难适合中国式的风格)。 joomla!适合国际化的、中大型企业使用,joomla!是很稳定的,这是我使用几年的实际体会。但是joomla!的模板制作比较复杂,需要高手多方面配合,因此做一般..
使用CodeIgniter开发PHP CMS系统
"基于PHP的CMS网站系统开发文档主要探讨了如何使用PHP编程语言和CodeIgniter框架构建一个内容管理系统(CMS)。文档深入解析了MVC(Model-View-Controller)架构的优势,并详细阐述了后台制作流程,包括文章管理、...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 再见-科大讯飞 47624
  • CMS-CMS框架解析 9709
  • mysql事务概念 2266
  • 设计模式->插入个论点:先设计后开发还是先开发后重构 1959
  • mysql 语句注意事项 1585

分类专栏

  • 前端
  • PHP 1篇
  • 计算机 1篇
  • 网络 1篇
  • 设计模式 11篇
  • 工具-github 1篇
  • 操作系统-linux 2篇
  • 职业感悟 1篇
  • 前端-css 5篇
  • mysql 3篇
  • PHP框架

最新评论

  • 设计模式->插入个论点:先设计后开发还是先开发后重构

    笨蛋峰: 设计模式都是前人累积下来的经验,如果没经验就想用设计模式写出符合业务的代码,那都是为了装逼吧。。。重构后的代码一般都有设计模式的影子。所以说重构才是王道!

  • PHP知识体系

    max不会告诉你的事情: 非常清晰明了。

  • PHP知识体系

    呆呆呆呆了: mark

大家在看

  • 一切皆是映射:DQN在健康医疗领域的突破与实践 373
  • 解读InnoDB数据库索引页与数据行的紧密关联 3940
  • 隐私计算匿踪查询技术深入浅出 1182
  • 国产化麒麟操作系统部署K8S 861
  • minishell 295

最新文章

  • CSS-圣杯布局
  • CSS2理解-float篇
  • CSS2理解 - position篇
2019年14篇
2018年12篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码永湖阿里店铺托管龙华百度关键词包年推广宝安标王荷坳网页设计坂田网站优化按天计费横岗百姓网标王推广惠州品牌网站设计龙华标王南联百度seo爱联外贸网站制作观澜网站关键词优化大芬模板制作双龙网站设计模板南山外贸网站设计沙井百搜标王光明企业网站制作坑梓推广网站坂田网站建设设计罗湖优化爱联网站优化排名坪山百度标王吉祥企业网站改版大浪网站开发福永网站设计石岩建设网站坂田外贸网站建设福永百度竞价平湖设计网站福永网站制作设计西乡建设网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化