ThinkPHP教程--14--模块化设计

【thinkPHP---模块化和URL模式】 thinkPHP---模块化和URL模式 阅读详情

一个完整的ThinkPHP应用基于模块/控制器/操作设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。

ThinkPHP3.2采用模块化的架构设计思想,对目录结构规范做了调整,可以支持多模块应用的创建,让应用的扩展更加方便。

一个典型的URL访问规则是(我们以默认的PATHINFO模式为例说明,当然也可以支持普通的URL模式):

 
  1. http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...]

ThinkPHP3.2的应用可以支持切换到命令行访问,如果切换到命令行模式下面的访问规则是:

 
  1. >php.exe index.php(或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...]

解释下其中的几个概念:

名称描述
应用基于同一个入口文件访问的项目我们称之为一个应用。
模块一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录。
控制器每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。
操作每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。

模块化设计的思想下面模块是最重要的部分,模块其实是一个包含配置文件、函数文件和MVC文件(目录)的集合。

模块设计

新版采用模块化的设计架构,下面是一个应用目录下面的模块目录结构,每个模块可以方便的卸载和部署,并且支持公共模块。

 
  1. Application 默认应用目录(可以设置)
  2. ├─Common 公共模块(不能直接访问)
  3. ├─Home 前台模块
  4. ├─Admin 后台模块
  5. ├─... 其他更多模块
  6. ├─Runtime 默认运行时目录(可以设置)

注意:3.2版本在原来3.1.3的独立分组的基础上进行了改进,改进后的独立分组就是新版的模块,之前的模块则改称为控制器。 默认情况下,只要应用目录下面存在模块目录,该模块就可以访问,只有当你希望禁止某些模块或者仅允许模块访问的时候才需要进行模块列表的相关设置。

每个模块是相对独立的,其目录结构如下:

 
  1. ├─Module 模块目录
  2. │ ├─Conf 配置文件目录
  3. │ ├─Common 公共函数目录
  4. │ ├─Controller 控制器目录
  5. │ ├─Model 模型目录
  6. │ ├─Logic 逻辑目录(可选)
  7. │ ├─Service Service目录(可选)
  8. │ ... 更多分层目录可选
  9. │ └─View 视图目录

由于采用多层的MVC机制,除了Conf和Common目录外,每个模块下面的目录结构可以根据需要灵活设置和添加,所以并不拘泥于上面展现的目录

公共模块

Common模块是一个特殊的模块,是应用的公共模块,访问所有的模块之前都会首先加载公共模块下面的配置文件(Conf/config.php)和公共函数文件(Common/function.php)。但Common模块本身不能通过URL直接访问,公共模块的其他文件则可以被其他模块继承或者调用。

公共模块的位置可以通过COMMON_PATH常量改变,我们可以在入口文件中重新定义COMMON_PATH如下:

 
  1. define('COMMON_PATH','./Common/');
  2. define('APP_PATH','./Application/');
  3. require './ThinkPHP/ThinkPHP.php';

其应用目录结构变成:

 
  1. www WEB部署目录(或者子目录)
  2. ├─index.php 入口文件
  3. ├─README.md README文件
  4. ├─Common 应用公共模块目录
  5. ├─Application 应用模块目录
  6. ├─Public 应用资源文件目录
  7. └─ThinkPHP 框架目录

定义之后,Application目录下面就不再需要Common目录了。

自动生成模块目录

从3.2.2版本开始,可以支持自动生成默认模块之外的模块目录以及批量生成控制器和模型类。

例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下:

 
  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.php';

然后访问URL地址

 
  1. http://serverName/index.php

就会生成Admin模块的目录,并生成一个默认的控制器类Admin\Controller\IndexController。如果需要生成更多的控制器类,可以定义BUILD_CONTROLLER_LIST常量,例如:

 
  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('BUILD_CONTROLLER_LIST','Index,User,Menu');
  4. define('APP_PATH','./Application/');
  5. require './ThinkPHP/ThinkPHP.php';

访问后会自动生成三个指定的控制器类:

 
  1. Admin\Controller\IndexController
  2. Admin\Controller\UserController
  3. Admin\Controller\MenuController

注意:默认生成的控制器类都是继承Think\Controller,如果需要继承其他的公共类需要另外调整。 如果在应用的公共配置文件中设置关闭了 APP_USE_NAMESPACE的话,生成的控制器类则不会采用命名空间定义。

还可以自己手动调用Think\Build类的方法来生成控制器类,例如:

 
  1. // 生成Admin模块的Role控制器类
  2. // 默认类库为Admin\Controller\RoleController
  3. // 如果已经存在则不会重新生成
  4. \Think\Build::buildController('Admin','Role');

同样,也可以定义BUILD_MODEL_LIST支持生成多个模型类:

 
  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('BUILD_CONTROLLER_LIST','Index,User,Menu');
  4. define('BUILD_MODEL_LIST','User,Menu');
  5. define('APP_PATH','./Application/');
  6. require './ThinkPHP/ThinkPHP.php';

访问会自动生成模型类:

 
  1. Admin\Model\UserModel
  2. Admin\Model\MenuModel

注意:默认生成的模型类都是继承Think\Model,如果需要继承公共的模型类需要另外调整。 如果在应用的公共配置文件中设置关闭了 APP_USE_NAMESPACE的话,生成的模型类则不会采用命名空间定义。

也可以自己手动调用Think\Build类的方法来生成模型类,例如:

 
  1. // 生成Admin模块的Role模型类
  2. // 默认类库为Admin\Model\RoleModel
  3. // 如果已经存在则不会重新生成
  4. \Think\Build::buildModel('Admin','Role');

禁止访问模块

3.2对模块的访问是自动判断的,所以通常情况下无需配置模块列表即可访问,但可以配置禁止访问的模块列表(用于被其他模块调用或者不开放访问),默认配置中是禁止访问Common模块和Runtime模块(Runtime目录是默认的运行时目录),我们可以增加其他的禁止访问模块列表:

 
  1. // 设置禁止访问的模块列表
  2. 'MODULE_DENY_LIST' => array('Common','Runtime','Api'),

设置后,Api模块不能通过URL直接访问,事实上,可能我们只是在该模块下面放置一些公共的接口文件,因此都是内部调用即可。

设置访问列表

如果你的应用下面模块比较少,还可以设置允许访问列表和默认模块,这样可以简化默认模块的URL访问。

 
  1. 'MODULE_ALLOW_LIST' => array('Home','Admin','User'),
  2. 'DEFAULT_MODULE' => 'Home',

设置之后,除了Home、Admin和User模块之外的模块都不能被直接访问,并且Home模块是默认访问模块(可以不出现在URL地址)。

单模块设计

如果你的应用够简单,那么也许仅仅用一个模块就可以完成,那么可以直接设置:

 
  1. // 关闭多模块访问
  2. 'MULTI_MODULE' => false,
  3. 'DEFAULT_MODULE' => 'Home',

一旦关闭多模块访问后,就只能访问默认模块(这里设置的是Home)。

单模块设计后公共模块依然有效

多入口设计

可以给相同的应用及模块设置多个入口,不同的入口文件可以设置不同的应用模式或者绑定模块。

例如,我们在index.php文件的同级目录新增一个home.php入口文件,并绑定Home模块:

3.2.0版本写法:

 
  1. // 绑定Home模块到当前入口文件
  2. $_GET['m'] = 'Home';
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.php';

3.2.1以上版本写法:

 
  1. // 绑定Home模块到当前入口文件
  2. define('BIND_MODULE','Home');
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.php';

如果你更改了系统默认的变量设置,则需要做对应的模块绑定的变量调整。

绑定模块后,原来的访问地址

 
  1. http://serverName/index.php/Home/Index/index

就变成

 
  1. http://serverName/home.php/Index/index

同样的方式,我们也可以在入口文件中绑定控制器,例如:

3.2.0版本写法:

 
  1. $_GET['m'] = 'Home'; // 绑定Home模块到当前入口文件
  2. $_GET['c'] = 'Index'; // 绑定Index控制器到当前入口文件
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.php';

3.2.1以上版本写法:

 
  1. define('BIND_MODULE', 'Home'); // 绑定Home模块到当前入口文件
  2. define('BIND_CONTROLLER','Index'); // 绑定Index控制器到当前入口文件
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.php';

绑定模块和控制器后,原来的访问地址:

 
  1. http://serverName/index.php/Home/Index/index

就变成:

 
  1. http://serverName/home.php/index

不同的入口文件还可以用于绑定不同的应用模式,参考应用模式部分。

CentOS 8 LEMP 部署避坑指南:SELinux、模块化PHP与MariaDB适配 LEMP(Linux + Nginx + MySQL + PHP)是主流Web应用栈,其核心在于各组件间的权限协同与协议兼容。在 CentOS 8 中,传统部署逻辑失效——DNF模块化机制将PHP、Nginx等拆分为多流版本,SELinux默认启用并严格限制httpd_t域的网络连接、数据库访问与文件读写,而MySQL被MariaDB替代后引发ThinkPHP等旧框架的驱动兼容性问题。这些变化使‘安装即运行’成为幻觉,真实挑战在于理解模块生命周期、精准配置SELinux布尔值与上下文、适配socket连接路 阅读详情

相关推荐

从Matlab定点仿真到Verilog实现:手把手教你搞定FPGA多相抽取滤波器的位宽与精度控制

本文详细介绍了从Matlab定点仿真到Verilog实现的FPGA多相抽取滤波器设计全流程,重点解析位宽与精度控制的关键技术。通过多相结构优化、动态位宽调整和精确验证方法,帮助工程师高效实现高性能数字信号处理系统,特别适合需要平衡计算复杂度与资源占用的FPGA应用场景。

weixin_30415113的博客 643

thinkphp学习笔记5—模块化设计

1.模块结构     完整的ThinkPHP用用围绕模块/控制器/操作设计,并支持多个入口文件盒多级控制。ThinkPHP默认PATHINFO模式,如下: http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...] 应用:由同一个入口文件访问的项目称为一个应用,在完整版的代码中就是Application 模块:一个应...

weixin_33935777的博客 219

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架

PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架源码前端uniapp开发,可以打包成APP(非H5封壳)+H5,接其他平台支付通道,前后端全开源H5盲盒首页可以直接开盒新UI修复优化BUG,修复无限抽,短信接口使用 第三方低价接口三级分销分润 自定义添加商品 设置自定义中奖概率!商品回收功能 例如60抽的商品,回收40价格一键回收;发货管理;玩法介绍;流程展示;开奖模式;模式;分销模式可进行回收或赠送好友及发货。

专注于与编程相关的知识内容分享 1206

THINKPHP 架构/模块化设计

模块化设计 一个完整的ThinkPHP应用基于模块/控制器/操作设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。   一个典型的URL访问规则是(我们以默认的PATHINFO模式为例说明,当然也可以支持普通的URL模式): http://serverName/index.php(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...] ThinkPHP的应用可...

张默的博客 2570

OpenSNS v6.2.0开源社交系统全功能实战平台

OpenSNS v6.2.0基于PHP+MySQL技术栈,采用模块化与插件化设计思想,构建可扩展的社交网络平台。系统遵循MIT开源协议,支持自由定制与二次开发,适用于兴趣社区、企业内网、校园社交等多种场景。其核心架构通过解耦的功能模块(如用户中心、内容发布、权限管理)实现高内聚低耦合,结合事件驱动机制提升模块间通信灵活性。// 示例:模块注册入口(伪代码)'name' => '微博模块',]);

weixin_34725745的博客 1087

Ubuntu 22.04 局域网安装GitLab

下面直接给你一份。

u013250861的博客 672

什么是php模块化设计,模块化设计 -ThinkPHP3.2.3完全开发手册 | 勺子杂货铺

一个完整的ThinkPHP应用基于模块/控制器/操作设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。ThinkPHP新版采用模块化的架构设计思想,对目录结构规范做了调整,可以支持多模块应用的创建,让应用的扩展更加方便。一个典型的URL访问规则是(我们以默认的PATHINFO模式为例说明,当然也可以支持普通的URL模式):http://serverName/index.php(或者其他应...

weixin_34712106的博客 458

C++跨平台Word文档处理库DuckX实战指南:从原理到项目集成

在C++开发中,处理Office文档,尤其是Word文件,常因缺乏原生易用的库而面临挑战。Office Open XML(OOXML)作为.docx文件的基础标准,其本质是包含XML文件的ZIP压缩包。理解这一原理,开发者便能通过解析和操作XML来实现文档的读写。DuckX库正是基于此,为C++提供了轻量级的解决方案。它封装了底层的ZIP处理和XML解析,提供了简洁的面向对象API,其技术价值在于实现了跨平台、无外部依赖的Word文档自动化生成与处理。这尤其适用于服务器端、嵌入式环境或需要脱离Office软

weixin_33508411的博客 387

thinkPHP5 简单的登录实例

登录功能,是我们几乎开发每个系统都必须的模块。登录功能设计思路用户输入网址展示登录页面用户输入用户名,密码等点击登录进行信息校验校验通过之后,记录用户登录信息,跳转指定页面用户校验失败,提示失败信息下面功能相关的目录和文件具体功能实现登录页面的设计为了快速搭建可用、美观的页面,我们采用一个比较成熟的前端框架 Bootstrap。下面我们到 Bootstrap的官网 Bootsrap官网下载 boo...

宣泄笔记的博客 5146

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 605

手把手教你用SlowFast训练自定义手势识别数据集(附FFmpeg抽帧技巧)

本文提供了一份基于SlowFast架构训练自定义手势识别数据集的完整实战指南。文章重点剖析了数据准备的核心挑战,详细讲解了利用FFmpeg进行高、低帧率抽帧的技巧,并介绍了构建半自动标注流水线、生成符合SlowFast要求的AVA格式数据集文件的具体方法。最后,针对手势识别场景,给出了关键的模型训练配置与调优建议,帮助开发者高效完成从数据到模型的全流程。

s1t2u3的博客 910

ThinkPHP基础:目录介绍及环境配置

目录结构: 关键的路径 目录 说明 tp5 项目根目录 ROOT_PATH tp5/application 应用目录 APP_PATH tp5/thinkphp 框架核心目录 THINK_PATH tp5/exend 应用扩展目录 EXTEND_PATH tp5/vendor Composer 扩展目录 VENDOR_PATH 核心框架目录 运行环境 Th...

一个小彩笔 1271

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1878

从零开始构建 ThinkPHP 8 多应用架构的完整指南

多应用模式是指在一个 ThinkPHP 项目中,同时运行多个独立的应用模块,每个应用有自己的控制器、视图、中间件等,但共享模型、服务、配置等资源。$user) {throw new ApiException('用户不存在', 404);phpreturn [],phpreturn [],],要点说明目录结构清晰的应用划分,common 存放共享资源路由配置每个应用独立路由,支持域名绑定服务层。

小虎哥-不可能变成可能 1624

技术指南| 叶绿体基因组高级分析全流程解析

本文详细解析了叶绿体基因组高级分析的全流程,包括实验设计、序列组装与注释、比较基因组分析、选择压力与功能进化等关键步骤。通过实战案例和技术技巧,帮助研究者掌握叶绿体基因组分析的核心方法,提升植物进化研究和系统学分析的效率与准确性。

weixin_33725239的博客 492

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

计算机毕业设计Thinkphp/Laravel房屋租赁系统的设计与实现gwmf

管理员后台主要功能是:用户管理、房东管理、房源信息管理、预约信息管理、合同信息管理、在线咨询管理、咨询回复管理、投诉信息管理、申诉信息管理、求租信息管理、求租回复管理等功能。等房屋租赁系统在设计与实施时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能,减少各组件之间的联系,从而达到减少相互影响的目的。如果开发一款房屋租赁系统,可以让用户在最短的时间里享受到最快捷的服务,提高管理员的整体工作水平,简化工作程序,这对用户、房东和管理员来说都是一件非常乐意的事情。

鹏飞的博客 470

恒玄BES调试笔记-BES2500如何Dump Anc Audio数据

从YP的4M flash改HP3的2M flash只需要改: 原工程:target.mk的export FLASH_SIZE ?= 0x200000和common.mk里的KBUILD_CPPFLAGS += -DNEW_IMAGE_FLASH_OFFSET=0x100000 OTA工程:target.mk的NEW_IMAGE_FLASH_OFFSET ?= 0x100000和FLASH_SIZE ?= 0x200000 ...

leezs的博客 1673

Thinkphp5萤火商城B2C小程序源码

Thinkphp5萤火商城B2C小程序源码,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。

专注于与编程相关的知识内容分享 1156

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

thinkphp+vue毕业生去向反馈调查平台的设计与实现

本系统后端采用 PHP 语言搭配Thinkphp或者 Laravel 框架,PHP 语法简洁且功能强大,Laravel 或者Thinkphp框架能优化代码结构、提升开发效率,高效实现系统核心逻辑与数据库交互。前端运用 Vue 框架,其组件化开发与响应式设计,可打造流畅交互界面。MySQL 数据库稳定可靠,能安全存储海量文档数据,整体而言,这些成熟技术相互配合,能顺利完成系统开发。开发软件: hbuiderx,vscode、Adobe Dreamweaver等。

2501_91488339的博客 488

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Web应用-Thinkphp框架-开发指南

Thinkphp框架二级导航分类,模板继承,内置标签Public 修改MVC模块化 ——访问机制传参加载模版模版引入 分离Runtime 缓存文件管理员添加数据验证及验证场景 控制器 validate在sql执行(敏感操作)之前验证数据模板 分页数据表连接查询TP 关联查询-----------------由于是3.2 版...

aming小老弟 97

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ThinkPHP 8与TCP协议交互机制深度解析

TCP协议作为网络通信的核心协议,通过三次握手建立可靠连接,并利用滑动窗口和流量控制机制保证数据传输的稳定性。在Web开发中,框架的生命周期管理与TCP协议的交互直接影响应用性能。ThinkPHP 8作为主流PHP框架,其模块化生命周期设计与TCP连接状态存在深度耦合,特别是在数据库操作、请求响应等关键阶段。通过分析TCP协议栈与框架的交互细节,开发者可以优化连接管理、异常处理等关键环节,提升高并发场景下的系统稳定性。本文结合ThinkPHP 8的路由解析、事务处理等典型场景,详解TCP状态转换与框架生命周

weixin_30628801的博客 359

Thinkphp和Laravel大健康养老院公寓管理系统_to14d_

本系统后端采用 PHP 语言搭配Thinkphp或者 Laravel 框架,PHP 语法简洁且功能强大,Laravel 或者Thinkphp框架能优化代码结构、提升开发效率,高效实现系统核心逻辑与数据库交互。前端运用 Vue 框架,其组件化开发与响应式设计,可打造流畅交互界面。MySQL 数据库稳定可靠,能安全存储海量文档数据,整体而言,这些成熟技术相互配合,能顺利完成系统开发。开发软件: hbuiderx,vscode、Adobe Dreamweaver等。

QQ511008285的博客 606

【全开源】keep健身小程序FastAdmin+ThinkPHP+UniApp

ThinkPHP6.0的ORM特性实现了运动数据的高效关联查询,例如用户步数与卡路里消耗的实时计算,在百万级数据测试中仍能保持300ms内的响应速度。通过UniApp的原生渲染能力,小程序可实现媲美原生APP的流畅动画效果——无论是瑜伽课程的跟练演示,还是跑步轨迹的实时绘制,都能达到60FPS的视觉体验。用户粘性提升的秘密藏在数据驱动中。在这个移动互联网高度发达的时代,一款融合FastAdmin后台框架、ThinkPHP高效开发与UniApp跨平台技术的健身小程序,正在重新定义运动健康的生活方式。

yuan_ma_qzffzq12的博客 979

【课程设计】PHP校园心理咨询预约系统-计算机毕业设计源码29194

. 学生功能 a. 注册与登录 账户注册:学生需注册账户,填写基本信息(如姓名、学号、联系方式等)。 登录与个人信息管理:学生可以登录后查看和更新个人资料(如健康状态、心理需求等),以便医生提供更个性化的咨询服务。 b. 预约咨询 选择咨询类型:学生可以选择自己需要的心理咨询类型(如情绪管理、学业压力等),帮助系统匹配合适的心理医生。 预约医生时间:查看医生的可预约时间,选择合适的时间段进行预约。 预约确认与提醒:在预约成功后,学生会收到预约确认信息,并可设置日程提醒功能,防止错过预约时间。 c. 查看医生

Biye_Design的博客 3386

基于PHP的学生课程成绩管理系统 毕业设计---附源码41542

系统涵盖课程与作业管理、成绩与考勤记录、学习资源分发、公告发布、家校互动交流、数据可视化分析以及多角色用户权限控制等核心模块。教师可通过系统完成课程安排、作业布置与批阅、成绩录入与分析;学生能够实时查看个人课表

Biye_Design的博客 462
上一篇: ThinkPHP教程--13--批量配置
下一篇: ThinkPHP教程--14--URL模式
路是自己的平凡的世界
博客等级 码龄13年 3粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值