PHP(三)框架设计思想--MVC基础框架的底层逐步实现

 一、MVC概述
1 混编方式
最早的php页面开发是将php代码和html代码放到一个脚本文件中,这种方式称为混编方式。
但是难以管理维护,已经淘汰了。

2 显示和逻辑分离
后来,将展示的html文件与业务处理的php文件分开。浏览器请求php逻辑文件,html对用户隐藏,在php文件中加载html文件。

 ~~模板文件:
html中可变的动态数据由php填充,但是php代码只负责输出数据,不负责处理数据。这样的文件叫做模板文件。使用的最多的就是echo,foreach、while。

~~模板文件隐藏:
用户不应该请求负责展示的模板文件,需要我们对模板文件隐藏起来。
可在apache、nginx中配置。.htaccess文件。

3 MVC思想架构
对于一个业务复杂的大型网站,显示和逻辑分离也不能更好的维护代码。于是在这基础上,再把逻辑中的所有的数据处理模块单独的提取出来,在需要功能上进行功能调度。这种思想就是MVC思想。
Model模型=》数据处理; Controller控制器=》功能调度;Vie视图 =》显示

M:Model,模型,项目中的数据处理单元,专门负责和数据库进行交互(增删改查)
V:View,视图,项目中用于结果展示的单元(以前的模板文件)
C:Controller,控制器,项目中负责某个功能整体流程调用的单元

浏览器只需要和C控制器进行交互,而模型M和视图V都被控制器所调用,并且模型M和V之间不存在任何的交互。浏览器只需请求stu_c文件即可。

 ~~优缺点:
代码结构分工明确,可读性强;代码结构分工明确,可读性强;代码结构分工明确,可读性强。
但是降低了代码运行的效率。

~~MVC与面向对象
mvc是架构思想,指项目中代码的组织关系,面向过程和面向对象都可以使用MVC的架构思想。但是mvc和面向对象才是黄金搭档。所以项目中的功能都要封装到类中。

二、MVC与面向对象
1.从模型类到控制器
A 模型类
把MVC中的数据处理单元的功能,封装到一个类中。一般项目开发中,一张数据表就对应着的一个模型类。模型类中定义的方法都是表的增删改查,如获取列表,删除,添加等功能。

~~举个例子

模型类中封装了学生表的列表信息和删除功能。在控制器内实例化对象调用即可。

B 引入基础模型类
封装的模型类中每个方法,都要传入参数,实例化数据库对象,同一个类的不同方法有大量重复的代码,而且其他类的方法也有可能出现该重复的代码。

为此我们引入基础模型类,在里面定义一些公共代码,被其他模型类继承。如在基础模型类中增加初始化数据库操作对象的功能。

~~模型类的单例模式
在一个控制器中(此时还未抽象化控制器类),对一个表需要进行多次操作,应该使用该表的一个模型就可以完成全部的任务。实例化模型类只需实例化一个即可。对每个模型类的实例化,我们用一个单例工厂类来完成类的实例化。模型类的单例定义静态数组存储。

2.从控制器类到入口文件
A 控制器类

实际开发中,将一系列相关或相似的功能,使用一个控制器来处理,而该控制器内的每一个方法,就对应着某一个具体的功能。
比如:增加学生,删除学生,修改学生的成绩等,可以用一个学生控制器类来完成。
控制器按功能划分,模型类按数据表划分

~~举个例子

B 增加入口文件index.php
对控制器抽象为类后,请求需要实例化类并调用其中的action方法。在删除原来非控制器类的控制器文件后,增加一个入口文件,每一次的请求都通过入口文件实例化控制器类调用其中的方法。

 index.php从mvc的角度就叫作前端控制器,也叫作入口文件

C 动作分发a
一个控制器内对应多个功能,如何保证每一次不同的请求,只需经过一个入口文件?
在入口文件中增加动作分发功能,根据每一次请求传递的参数动作,规定要走控制器的哪个方法。
动作分发参数定义为a。

~~举个例子
index.php?a=list   代表当前请求的是学生列表的功能
index.php?a=remove  代表当前请求的是学生删除的功能

~~代码实现
第一次访问时不会携带a参数,需要给定默认值。在网页上点击时,需要在html中确定动作分发参数a的执行动作。

从功能的角度看,index.php也叫作请求分发器

D 控制器分发c
项目中有很多不同的控制器,完成不同的功能。比如,我们还可以再增加一个教师相关的操作控制器类。

这时就需要在一个入口文件中对不同的控制器完成分发。就需要使用到控制器Controller的分发参数c。

~~举个例子
在请求前端控制器index.php的时候,向其传递c参数,表示当前所需要执行的控制类的类名。
index.php?c=Stu&a=list 学生列表动作
index.php?c=Tea&a=list 教师列表动作

~~代码实现
同a参数一样,在入口文件中也需要定义一个默认的c参数,而也需要在其他的HTML链接地址中也主动增加c参数。

 ~~使用常量存储分发参数
在一次请求周期中,已经确定了请求的控制器和当前动作。上述代码用变量存储了控制器的名字和方法名。如果在代码中某些地方操作变量,会改变控制器名和代码名。所以用常量存储更为保险。

F 基础控制器类
控制器类中的不同方法都存在相同的代码,如前面的StuController控制器类中的两个动作以及TeaController中的list动作都使用到了header函数。
引入基础控制器类,把所有控制器的公共代码放到该类里面,其他控制器类继承该类。

~~代码实现
初始化文件编码方法,在实例化控制器类的时候由系统自动的进行初始化,放在构造方法中。

一个index.php文件完成了对不同控制器的不同方法分发,所以,index.php也叫作单入口文件,这种模式也叫作单入口模式。

3.目录布局
A 目录文件的规划
上述代码文件,有的是业务需求代码,有的是框架代码。创建相关目录把合适的文件放到合适的目录里,体现代码之间的组织关系。

框架代码Frame 在各个应用程序之间可以通用的代码

应用程序代码 App 针对当前项目的业务逻辑实现的代码,不同的项目各不相同。

入口文件放在网站根目录。

B 划分平台
一个项目中往往有多个端,如用于前端展示的前台,后端管理数据的后台,小程序端,app端等。
在App目录下添加前台后台两个子目录

~~ 平台内的mvc划分
各个平台之间应该是相对独立的,而各个平台的功能又是是由MVC来完成的。

~~整体目录布局

~~整体运行
文件目录的改变,相应的需要改变代码中类文件的引入路径。
目前是单入口程序,所有的相对地址,都是相当于入口文件index.php而言的.

C 平台分发p
index.php?p=Test&c=Stu&a=list
index.php?p=Home&c=User&a=register

~~代码实现

5.从入口文件到框架初始类
A 自动加载
代码中对类的实例化需要手动引入类文件,在入口文件中实现定义好自动加载函数,因为类的自动加载需要在实例化之前定义。

~~思路分析
所有需要加载的类文件有框架核心类(已经确定好了)、控制器类、模型类(可以增加)3种。
对于不确定的可以增加的类,需要通过类名的规律,完成其位置的判断,然后再进行自动的加载。

完成上述代码的实现,即可删除实例化中类文件的引入代码。

B 目录常量
代码中有很多地方用到了对目录的引入,如果改变文件位置,就需要对每一处的目录进行更改,为此将这些目录定义成目录常量,在入口文件处就可以完成统一修改。

~~定义基础目录常量

~~定义当前平台下的相关目录常量

 ~~将所有出现路径的地方用目录常量代替

C 框架初始类
目前,入口文件内实现的功能加多,将原来入口文件的功能,放到一个专门的类中来完成,而入口文件的各个功能,由该类的各个方法来实现,这个类一般也叫作框架初始化类,也叫作框架类。

入口文件还未实现自动加载,需要手动引入框架类文件.

~~框架初始类的功能代码

 

 

 

 

 

 

6.从框架初始类到配置文件
在项目开发中,很多参数都是在脚本中使用,如数据库的相关参数直接写在了代码中,为了管理方便,建立相关的配置文件管理这些参数。

每个不同的项目都有不同的配置参数,所以将他们放在App目录下。

在框架类中定义配置文件的目录常量

 配置文件管理

在框架类中增加载入配置文件的操作

应用配置参数

7.数据库扩展的选择--引入PDO
引入pdo,用户可以自己选择到底是使用MySQL扩展还是PDO扩展,只需要在配置文件中进行配置就行了,而不需要修改项目中的其他的任何代码,实现无缝切换。

封装MySQLDB类和PDODB类,让二者都行实现相同的接口。

修改配置文件

在基础模型类中选择数据库类文件

 在Frame目录下创建dao子目录,存放dao层的相关类和接口。注意修改目录常量。

 

 

 在dao目录创建I_DAO.interface.php

 让MySQLDB类实现这个接口

在dao目录创建PDODB.class.php,并实现相关方法

8.从控制器类到视图--引入Smarty
Smarty是属于外部提供的功能(插件),我们一般的做法是将其放到一个专门的目录里面,该目录可以命名为Vendor,也可以叫作Tools

A 配置Smarty
在根目录下创建Vendor目录,复制Smarty核心文件

 设置目录常量和自动加载

B 在基础控制器中引入Smarty

C 在代码中引用Smarty
Smarty常用的两个方法
assign:分配变量。display:输出模板

上述代码无法执行成功,因为smarty暂时还不知道stu_v.html文件目录。即还没有为Smarty设置默认的模板目录,还需要继续在基础控制器类里面设置。

~设置Smarty默认的模板目录:
规定视图按照所属的控制器再次进行分类,就是在视图View目录下,再次建立相应的控制器的名称作为子目录,然后将其对应的视图文件放到不同的子目录下。

 

~~优化编译目录
Smarty默认的编译目录是templates_c,所有的编译文件都在里面,比较混乱,而且放在根目录下也不合适,应该加以优化处理。
首先,我们应该将编译目录跟各个平台下的View目录同级,名字叫作View_c,并且和View一样也可以使用控制器作为子目录!

 ~~视图文件中使用分配的变量输出

 ~~优化Smarty对象的调用方式
在基础控制器中封装两个方法,就每次就可以直接使用$this->assign()和$this->display()两个方法
 

综上,一个基础MVC框架就算开发完成了。

三、MVC框架在开发中应用与优化(后台开发)
1.从基础代码文件到项目开发文件(初始化项目)

A 项目搭建
创建项目目录为根目录 =》nginx添加项目配置 =》 域名配置 => 数据库配置

B 移植mvc框架
复制框架代码,修改配置文件

C 根目录下创建public目录作为平台划分
在public划分平台home和back

前台和后台存放各自的css,image和js文件

增加新创建文件夹的目录常量。

除了public目录和入口文件,其余目录设置不能直接访问。在.htaccess中设置

2.实现后台登录
A 后台登录的业务开发
创建admin相关的mvc,AdminController、AdminModel、admin视图目录
开始开发。

B 封装跳转动作
分成直接跳转和刷新(提示)跳转,一般如果验证成功,就直接跳转,如果验证失败,就给出提示之后再进行跳转

在基础控制器类中定义jump方法。

 

C.引入其他功能,Vender中封装验证码类
在真实的项目中,验证码可以作为外部的插件直接引入,所以这里可以将验证码类放到Vendor目录下。
流程步骤:
创建类文件 =》增加类文件的自动加载 =》完善验证码类的逻辑 =》 配置文件中关联验证码类

项目中使用

D.平台控制器的引入,防止用户翻墙(必须登录)
让所有的业务控制器继承一个平台控制器,平台控制器中定义了判断用户信息的代码。

构造方法中调用

列出不需要验证的页面


E 数据接收的封装
基础控制器中封装过滤数据的方法 request。
由于对用户提交的数据在进行过滤的时候使用的比较多,操作起来比较麻烦,可以在基础控制器中增加一个专门过滤用户数据的方法。

~~ 防止SQL注入
A 概述
用户在进行一些数据库的操作,如表单提交,通过输入特殊的字符对sql产生了影响。
利用sql拼接如    ’ or 1 #

B 解决方案
对进来的数据进行过滤筛选处理。
将输入的字符串中带有引号的添加反斜杠,使用php函数addslashes()。
addslashes() 函数返回在预定义的字符前添加反斜杠的字符串。

3.后台首页功能,后台退出功能

4.信息分类管理-无限级分类
A 无限极分类原理

在业务开发中,涉及到目录栏下还有分类。创建分类表,利用无限极分类实现。

创建分类表,并在表中增加一个pid字段代表其父类id,如果该分类是一级分类(主类别),就设置pid为0。

在实际项目中,先获取所有分类,再使用递归树状展示。

排序后的数据,根据level判断层数,用于输出

或者将子类数据放在children数组中,子类包含子类一直延续下去。

B 实现分类的增删改查

查询出所有的分类信息后,还无法显示出它们之间的主从信息,这时就需要引入无限分类机制。

5.后台内容添加功能
A 完善文章的增删改查功能

B 封装并应用文件上传类

C 在线编辑器Ckeditor引入

D 在线文件管理器Ckfinder

E 后天首页展示与封装分页类

6.前台首页展示
A 首页功能完善

导航输出一级分类 

后台控制文章前台显示 is_recommend

站长信息功能

百度分享功能

最新最热文章

友情链接

首页文章分页显示

面包屑功能

浏览次数更新

上一篇下一篇功能
art_id = 10的上一篇
select * from bg_article where is_del=’0’ and cate_id=8 and where art_id < 10 order by art_id desc limit 1;
select * from bg_article where is_del=’0’ and cate_id=8 and where art_id < 10 order by art_id desc limit 1;

单页面功能
一个栏目下只有一个页面:关于我们,公司介绍,在线招聘,网站公告等
创建单独的分类目录存储单页面目录,绑定文章

公有代码提取

7.会员注册功能

8.评论管理

9 缩略图

有时候在项目中,由于排版的需要,在显示图片的时候,宽和高都不是很大,但是可能用户上传的图片却很大!所以可以根据项目排版的实际需要将原图生成相应的缩略图,以节省用户的传输带宽,提高用户的体验度

B 封装图像处理类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于MyQEE MyQEE是一个开源、快速、优雅的轻量级PHP框架,支持HMVC模式,建立在PHP5.2基础之上,支持多项目管理开发,数据库内置自动主从分离功能,MySQL支持事务操作功能并且支持自动嵌套功能,多驱动设计灵活适应各种环境。点击访问 [MyQEE入门指引](./manual/guide/zh-cn/starting.md)。   拒绝粗糙不堪、复杂的代码,选择MyQEE,选择为WEB艺术家创造的PHP框架吧。   MyQEE PHP框架的特色 * MyQEE是一套轻量级的框架,但不是简陋的框架,系统具备完善的底层类库和强大的扩展功能设计; * 特有的 [HMVC](./manual/guide/zh-cn/hmvc.md) (分层MVC设计)和多项目支持,开发更灵活; * 支持时下最流行的PHP包管理器 [Composer](http://getcomposer.org/) ,并且可以使用 Composer 安装 MyQEE 提供的官方类库; * 代码一致性设计:例如 `MySQL` 和 `MongoDB` 的查询语句完全不同,但是在 MyQEE 里可以做到实现90%的一致性,你的代码既可以使用在 `MySQL` 的环境里也可以用在 `MongoDB` 上; * 包括`Database`, `Cache`, `HttpClient`, `Session`, `Storage`, `Upload` 等支持多驱动,可以适应不同环境的需求,其中数据库支持 `MySQL`, `MySQLI`, `Mongo`, `SQLite`, `Postgre`,缓存支持 `Memcache`, `File`, `Redis`, `Apc`, `Database`, `SQLite`, `WinCache` 等; * 数据库提供强大的 `QueryBuilder` 功能,可实现同相同程序兼容多种数据库,解决SQL注入隐患和迁移环境后顾之忧; * 云引擎支持:支持SAE和BAE等云引擎,MyQEE网站就运行在SAE上; * 高性能和优雅的代码:经测试 MyQEE 的初始化速度比 Codeigniter 等优秀的轻量级框架还快; * 完备和详细的文档和API支持,更可简单的生成自己的团队文档; * 为团队开发而生,特别提供团队类库功能,多项目设置可以帮助团队成员之间规划独立和共用的代码; * ORM支持,提供了特有的高性能ORM; * 支持 `RESTFul`,支持 [PHPRPC](http://www.phprpc.org/); * 独创5模式运行设计:普通控制器、后台、命令行、系统调用、RESTFul的控制器相互分离,系统更加安全可靠;   安全性 * 系统内置XSS安全过滤; * 防SQL注入,强大的QueryBuilder; * 强制数据类型转换; * 普通控制器、后台、命令行、系统调用、RESTFul 5种运行模式相互隔离,安全更有保障;   MyQEE v3.0 RC2 更新日志: 本次更新在3.0RC1的基础上做了一些完善,修复了一些Bug: 完善文档生成脚本 完善模块化的拆分 数据库增加对 group_concat 的支持,MongoDB数据库驱动支持在group查询中使用distinct查询,修复MongoDB驱动力中查询slave在新的版本里可能导致连接失败的问题 增加 BigInt 类库 日期类库完善 HttpClient 增加upload方法,可实现上传文件功能 完善邮件类库,修复 Email 中上传附件bug,支持收件人姓名 邮件的格式,完善密件抄送的功能 Session 类库优化 Swift Storage 驱动完善,token验证支持v1和v2版本,优化参数传送方式,支持url方式的配置
+------------------------------------------------------------------- | 感谢您使用ThinkPHP开发框架 ^_^ +------------------------------------------------------------------- | 大道至简 开发由我 WE CAN DO IT,JUST THINK +------------------------------------------------------------------- | 版本信息:ThinkPHP 3.1 Release 2012/9/5 +------------------------------------------------------------------- | Copyright(c) 2006-2012 http://thinkphp.cn All rights reserved. +------------------------------------------------------------------- [ 简介 ] ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架, 遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而 诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性 能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在 社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,众多 的典型案例确保可以稳定用于商业以及门户级的开发。 经过6年的不断积累和重构,3.0版本在框架底层的定制和扩展方面趋于完善, 使得应用的开发范围和需求适应度更加扩大,能够满足不同程度的开发人员的 需求。而且引入了全新的CBD(核心+行为+驱动)架构模式,旨在打造DIY框架 和AOP编程体验,让ThinkPHP能够在不同方面都能快速满足项目和应用的需求, 并且正式引入SAE、REST和Mongo支持。 使用ThinkPHP,你可以更方便和快捷的开发和部署应用。当然不仅仅是企业级 应用,任何PHP应用开发都可以从ThinkPHP的简单和快速的特性中受益。 ThinkPHP本身具有很多的原创特性,并且倡导大道至简,开发由我的开发理念, 用最少的代码完成更多的功能,宗旨就是让WEB应用开发更简单、更快速。 为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应 用开发的最佳实践!经过6年来的不断重构和改进,ThinkPHP达到了一个新的 阶段,能够满足企业开发中复杂的项目需求,足以达到企业级和门户级的开 发标准。 [ 协议 ] ThinkPHP遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP, 甚至允许把你的ThinkPHP应用采用商业闭源发布。 具体参考LICENSE.txt内容 [ 特性 ] CBD架构:ThinkPHP3.0版本引入了全新的CBD(核心+行为+驱动)架构模式, 打造框架底层DIY定制和类AOP编程体验。利用这一新的特性,开发人员可以 方便地通过模式扩展为自己量身定制一套属于自己或者企业的开发框架。 编译机制:独创的项目编译机制,有效减少OOP开发中文件加载的性能开销。 改进后的项目编译机制,可以支持编译文件直接作为入口载入,并且支持常量 外部载入,利于产品发布。 类库导入:采用基于类库包和命名空间的方式导入类库,让类库导入看起来更 加简单清晰,而且还支持自动加载和别名导入。为了方便项目的跨平台移植, 系统还可以严格检查加载文件的大小写。 URL和路由:系统支持普通模式、PATHINFO模式、REWRITE模式和兼容模式的 URL方式,支持不同的服务器和运行模式的部署,配合URL路由功能,让你随心 所欲的构建需要的URL地址和进行SEO优化工作。支持灵活的规则路由和正则路 由,以及路由重定向支持,带给开发人员更方便灵活的URL优化体验。 调试模式:框架提供的调试模式可以方便用于开发过程的不同阶段,包括开发、 测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。 只是小小的性能牺牲就能满足调试开发过程中的日志和分析需要,并确保将来的 部署顺利,一旦切换到部署模式则可以迅速提升性能。 ORM :简洁轻巧的ORM实现,配合简单的CURD以及AR模式,让开发效率无处不在。 数据库:支持包括Mysql、Sqlite、Pgsql、Oracle、SqlServer、Mongo等数据库, 并且内置分布式数据库和读写分离功能支持。系统支持多数据库连接和动态切换 机制,犹如企业开发的一把利刃,跨数据库应用和分布式支持从此无忧。 查询语言:内建丰富的查询机制,包括组合查询、快捷查询、复合查询、区间 查询、统计查询、定位查询、多表查询、子查询、动态查询和原生查询,让你的 数据查询简洁高效。 动态模型:无需创建任何对应的模型类,轻松完成CURD操作,支持多种模型之间 的动态切换,让你领略数据操作的无比畅快和最佳体验。 扩展模型:提供了丰富的扩展模型,包括:支持序列化字段、文本字段、只读字 段、延迟写入、乐观锁、数据分表等高级特性的高级模型;可以轻松动态地创建 数据库视图的视图模型;支持关联操作的关联模型;支持Mongo数据库的Mongo模 型等等,都可以方便的使用。 模块分组:不用担心大项目的分工协调和部署问题,分组帮你解决跨项目的难题, 还可以支持对分组的二级域名部署支持。 模板引擎:系统内建了一款卓越的基于XML的编译型模板引擎,支持两种类型的 模板标签,融合了Smarty和JSP标签库的思想,并内置布局模板功能和标签库扩展 支持。通过驱动还可以支持Smarty、EaseTemplate、TemplateLite、Smart等其他第 方模板引擎。 AJAX支持:内置和客户端无关的AJAX数据返回方法,支持JSON、XML和EVAL类型 返回客户端,而且可以扩展返回数据格式,系统不绑定任何AJAX类库,可随意使 用自己熟悉的AJAX类库进行操作。 SAE支持:提供了新浪SAE平台的强力支持,具备“横跨性”和“平滑性”,支持本地化 开发和调试以及部署切换,让你轻松过渡到SAE开发,打造全新的SAE开发体验。 RESTFul支持:REST模式提供了RESTFul支持,为你打造全新的URL设计和访问体验, 同时为接口应用提供了支持。 多语言支持:系统支持语言包功能,项目和分组都可以有单独的语言包,并且可以 自动检测浏览器语言自动载入对应的语言包。 模式扩展:除了标准模式外,还提供了AMF、PHPRpc、Lite、Thin和Cli模式扩展支 持,针对不同级别的应用开发提供最佳核心框架,还可以自定义模式扩展。 自动验证和完成:自动完成表单数据的验证和过滤,新版新增了IP验证和有效期验 证等更多的验证方式,配合自动完成可以生成安全的数据对象。 字段类型检测:系统会自动缓存字段信息和字段类型,支持非法字段过滤和字段类 型强制转换,确保数据写入和查询更安全。 缓存机制:系统支持包括文件方式、APC、Db、Memcache、Shmop、Sqlite、Redis、 Eaccelerator和Xcache在内的动态数据缓存类型,以及可定制的静态缓存规则,并 提供了快捷方法进行存取操作。 扩展机制:系统支持包括模式扩展、行为扩展、类库扩展、驱动扩展、模型扩展、 控制器扩展、Widget扩展在内的强大灵活的扩展机制,让你不再受限于核心的不足 和无所适从,随心DIY自己的框架和扩展应用,满足企业开发中更加复杂的项目需求。 [ 要求 ] ThinkPHP3.1需要PHP5.2.0以上版本支持,可以运行在任何系统环境下面。 [ 安装 ] ThinkPHP无需安装,下载ThinkPHP核心包或者完整版之后,把解压后的目录拷贝到 你的WEB服务器或者WEB目录即可。 [ 鸣谢 ] 特别要鸣谢ThinkPHP团队和所有关注和支持ThinkPHP的用户。 [ 支持 ] 更多内容和支持请访问ThinkPHP官方网站http://thinkphp.cn/ 和论坛 http://bbs.thinkphp.cn。
迅睿CMS免费开源系统是基于PHP8语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架,提供“电脑网站 + 手机网站 + APP 接口”一体化网站技术解决方案。她拥有强大稳定底层框架,以灵活扩展为主的开发理念,二次开发方便且不破坏程序内核,为 WEB 艺术家创造的 PHP 建站程序,堪称 PHP 万能建站框架。 迅睿CMS免费开源系统特点: 一、程序架构 迅睿CMS框架是采用PHP8全新语法开发的web内容管理系统开发框架,拥有迅睿CMS强大的内容管理功能和灵活扩展的特性,堪称 PHP 万能建站框架。强大而灵活的内容模块和插件机制,开发者可以自定义内容模块,也可以根据自身的需求以插件的形式进行扩展。 迅睿CMS框架采用最新CodeIgniter4框架,拥有完善的二次开发文档,并且遵循框架原生编程风格,非常方便二次开发;CodeIgniter 安装包中包含《用户手册》,手册囊括了入门介绍、教程、“手把手”指导,还包括了框架组件的参考文档。 二、效率与安全 1、运用全新PHP8语法特性,设计时考虑到性能优化,运行效率高达4倍于PHP5系列开发环境 2、运用CI框架的扩展性和路由模式,加上ZF框架强大丰富的中间件和扩展包,大大提高系统的扩展性能 3、Zend框架官方全部扩展包支持自由引入本系统,按需加载模式,最大限度地提高开发效率 4、利用ZF提供的与安全相关的组件,包括 SQL 注入、XSS、CSRF、垃圾邮件和密码暴力破解攻击 5、动态缓存技术让动态页面新增支持缓存,让采用动态页面模式的网站访问速度更快,效率更高 6、全站支持HTTPS传输协议,更安全,支持小程序数据请求的URL规范 7、表单增加“csrf_token”验证功能,防护更强 、多插件机制 框架采用多个Module作为App应用,迅睿CMS继续沿用此设计模式,并且支持多个App插件化。 1、插件目录结构:dayrui/App/***/。 2、插件支持独立运行。 3、插件内部结构遵循CI4App规则。 四、自定义CI扩展类 迅睿CMS在不破坏CI4框架本身的情况下,进行了扩展CI自带的类库。 1、重写CI错误异常显示类,中国化。 2、重写路由类,符合国内建站程序的URL结构,如:c=控制器&m=方法名&id=参数。 3、重写钩子类,CI4钩子类会加载所有App中的自定义钩子,App数量过多时会影响速度,迅睿CMS提出全局钩子配置文件。 4、重写安全类,强化过滤非法字符串。 五、模板解析类(视图) CI4本身的模板解析类不太灵活,迅睿CMS采用天睿自主研发天睿模板引擎技术,MVC设计模式实现业务逻辑与表现层的适当分离,使网页设计师能够轻松设计出理想的模板。 1、支持原生态PHP语法特性。 2、支持CI框架语法结构。 3、{变量}自定义系统标签语法结构。 4、模板缓存,只需要一次解析,提升性能。 六、自定义扩展类目录 迅睿CMS有全局Library目录,专门用于扩展类库,与Librarys用法不太一样,但原理一样。 1、全局Library调用。 2、可继承全局Library函数类。 3、App有自己独立的Library函数类。 4、跨App支持调用任意App的Library函数类。 七、网站模板机制 CI4不具备终端识别模式,迅睿CMS增加多终端识别和自定义终端显示。 1、迅睿CMS模板分为手机端和电脑端。 2、后台可以直接编辑网站模板和手机模板。 3、编辑模板自动备份,以免老模板丢失。 4、编辑模板时自动检测模板语法是否正确。 5、为模板文件中文命名,以免快速区分。 八、万能Table类 迅睿CMS框架为开发者准备了万能的Table类,此类用于对数据表的增删改查操作,只需要配置文件,逻辑功能由迅睿CMS来帮你完成。 1、支持任意表数据展示。 2、多表联合查询。 3、自定义字段格式入库规则。 九、自定义字段 迅睿CMS采用非常成熟的自定义字段方案,可以支持到栏目表自定义字段、内容表自定义字段、表单表自定义字段、用户表自定义字段、评论表自定义字段、页面表自定义字段、链接表自定义字段、tag表自定义字段等。 1、文本字段,有单行文本、多行文本、文本事件字段 2、上传字段,有单文件上传、多文件上传 3、日期时间字段,支持自定义年月格式显示 4、联动菜单字段,用于无限分类层级显示的数据,例如城市 5、百度地图字段,用于定位地图坐标,坐标范围内筛选数据 6、富文本字段,百度编辑器、百度移动编辑器 7、选项字段,单选字段、多选字段、下拉选择字段 8、颜色字段,用于选择网页颜色值 9、属性字段,用于类似于商品属性的数据 10、内容关联字段,用于加载其他模块内容的字段,例如专题功能 11、价格字段,用于CMF站内购物交易,例如文章买卖、下载收费 12

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值