专栏首页landv[CodeIgniter4]概述-模型,视图和控制器

[CodeIgniter4]概述-模型,视图和控制器

模型,视图和控制器

当创建一个应用的时候,我们需要有一种便捷的代码结构。和很多 Web 框架类似, CodeIgnite 框架也使用了模型、视图、控制器结构,即 MVC 模式,来组织接着代码文件。这种方式可以将数据,展示部分和流程部分分别作为单独的部分存放在我们的应用中。需要注意的是,可能每个人会对某个元素所担任的角色有不同的看法,那么,下面我们就通过这个文档说明这些元素所担任的角色。

模型 主要用来管理应用的数据, 根据应用的特殊业务规则获取数据。

视图 是一个没有或者少量逻辑的简单的文件, 它只负责将数据展示给用户。

控制器 主要承担了胶水代码的功能, 它主要在视图层和数据存储之间来回的处理并整合数据。

在最简单的情况下,控制器和模型只是一个完成特定工作的类。他们虽然不是你可以使用的唯一类的类型,但他们是构成整个框架的核心。你也可以将控制器和模型文件存储在任何你需要的位置,但是 CodeIgnite 框架在 /app 目录中为我们指定了存储目录。我们将在之后进行详细讨论。

下面我们就来看一下这三个主要组成部分。

组成

视图

视图是最简单的文件,一个视图文件通常是一个HTML文件加入少量的PHP代码。视图中的PHP代码应该尽可能的简单,一般只是显示一个变量内容,或者通过循环语句将数据输出在表格中展示出来。

视图从控制器中获取数据并展示——控制器将数据发送给视图,视图通过简单的 echo 调用将数据展示出来。你也可以在一个视图中插入展示其他视图,这样可以很简单的在每个页面上展示出公共的页眉和页脚。

视图文件通常存放在 /app/Views 目录下,如果在创建文件时不按照一定的规则创建的话,会显得我们的代码杂乱无章。 CodeIgnite 框架虽然没有规定任何的规则,但通过经验我们规定在 Views 目录下创建一个新的目录对应每个控制器。然后通过方法名来命名视图。这样就会使我们之后查找起来更加容易。例如:用户配置 可能会显示在一个名为 User 的控制器中,并且方法名称为 profile ,你就可以将该视图文件保存在 /app/Views/User/Profile.php 这个路径下,并这样命名。

这种良好的组织代码方式建议养成一个习惯。可能有些时候,你有一些其他需求需要以其他方式来组织代码,没关系,只要CodeIgnite框架可以找到这个文件,这个视图就会被显示。

想要了解更多关于视图的内容可以查阅相关内容

模型

模型的主要任务是给应用维护单一类型的数据。比如:用户,博客内容,交易信息等。所以,模型的工作有以下两种,对数据进行采集或者放入数据库中执行业务规则;检索数据并将数据库中的数据读取出来。也就是进行数据的增删改查的操作。

数据的任何限制和要求都由模型层承担,包括在保存数据前将原始数据初始化,或者在数据传给控制器前将数据格式化。这样可以保证你可以不用在多个控制器中出现重复代码,或者出错。

模型类型的文件保存在 /app/Models 这个目录下,虽然他们也可以使用一个命名空间分组,但是还是建议你将模型文件放在这个目录下。

想要了解更多有关模型的内容可以查阅

控制器

控制器主要承担了几个不同的角色。最常见的就是他们会接收用户的请求,然后判断这个请求应该执行什么样的操作。而这一过程通常会涉及到将数据发送给模型层保存,或者去请求模型层的数据返回给视图。控制器也会用来加载其他应用程序请求的除模型参与的任务。

控制器的林外的任务就是用来处理和 HTTP 请求相关的所有事情——重定向、认证, Web 安全,编码等。总之,控制器是你的应用程序的入口,通过控制器访问你的应用的用户才可以到达指定的地方并获取他们想要的数据使用格式。

控制器通常会保存在 /app/Controllers 这个路径下, 虽然你也可以使用命名空间分组,但是还是建议你将控制器存放在该目录下。

想了解更多关于控制性的信息可以查阅

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [golang]Go常见问题:# command-line-arguments: ***: undefined: ***

    在开发代码过程中,经常会因为逻辑处理而对代码进行分类,放进不同的文件里面;像这样,同一个包下的两个文件,点击idea的运行按钮或者运行 go run main....

    landv
  • [财务][数据化分析][帆软]报表设计-设计思路

    使用 FineReport 设计器设计模板,首先需要了解 FineReport 模板制作的思路,沿着其思路来了解 FineReport 报表中的所有功能。

    landv
  • 《挑战30天C++入门极限》C++面向对象编程入门:构造函数与析构函数

    landv
  • [ISUX译]iOS 9人机界面指南(四):UI元素(上) - 腾讯ISUX

    腾讯ISUX
  • SwiftUI:集成 MapKit

    自从2007年第一台设备问世以来,地图就一直是iPhone的核心功能,开发者几乎已经可以使用底层框架了。它叫做 MapKit,和UIKit一样,如果我们不介意进...

    韦弦zhy
  • 视图——机房收费系统

    在第一次做机房收费系统时,学生信息和卡的信息是在同一张表中的,而机房收费系统重构时,对数据库进行了重新设计,学生信息和卡的信息被分到了单独的两张表中(遵照三范...

    令仔很忙
  • 探索SQL Server元数据(一)

      在数据库中,我们除了存储数据外,还存储了大量的元数据。它们主要的作用就是描述数据库怎么建立、配置、以及各种对象的属性等。本篇简单介绍如何使用和查询元数据,如...

    用户1217611
  • asp.net mvc razor布局页中a标签的href的跳转问题

    笔者做了一个文件上传系统,文件上传后,保存在wwwroot目录的file文件夹中,并把该文件的路径保存到数据库中, 如这样的一个路径保存在数据库: file/b...

    码农阿宇
  • MySQL视图

    视图是关系型数据库重要的组成部分之一,它可以限制数据访问,简化复杂查询,保持数据的独立性,以及基于相同的数据提供不同的视图等等。本文介绍MySQL数据库视图的一...

    Leshami
  • 物化视图实现的特殊数据复制(r11笔记第42天)

    今天开发同事碰到一个有些复杂的数据复制需求,想让我帮忙看看能否实现,当然猛一听需求是不可能实现的。不过还是耐着性子和他们讨论了一下,不过我想了下,似乎还是有...

    jeanron100

扫码关注云+社区

领取腾讯云代金券