讲解

本教程旨在向您介绍CodeIgniter框架和MVC体系结构的基本原理。它将向您展示如何以逐步的方式构造基本的CodeIgniter应用程序。

在本教程中,您将创建一个基本的新闻应用程序。您将从编写可加载静态页面的代码开始。接下来,您将创建一个新闻部分,该部分将从数据库中读取新闻项。最后,您将添加一个表单以在数据库中创建新闻项。

本教程将主要关注:

  • 模型-视图-控制器基础知识
  • 路由基础
  • 表格验证
  • 使用“查询生成器”执行基本数据库查询

整个教程分为几页,每页仅解释CodeIgniter框架功能的一小部分。您将浏览以下页面:

  • 简介,此页面为您提供了预期的概述。
  • 静态页面,它将教您控制器,视图和路由的基础知识。
  • 新闻部分,您将在这里开始使用模型,并将进行一些基本的数据库操作。
  • 创建新闻项,这将引入更高级的数据库操作和表单验证。
  • 结论,这将为您提供进一步阅读和其他资源的一些指示。

享受您对CodeIgniter框架的探索。

加载静态页

Note: 本教程假设你已经下载好 CodeIgniter,并将其 安装 到你的开发环境。

首先你需要新建一个 控制器 来处理静态页。控制器就是用来帮助你完成工作的一个简单的类,它是你整个 Web 应用程序的"粘合剂"。

CI3 需要$this->load->view 现在CI4 view('welcome_message');即可

例如,当访问下面这个 URL 时:

根据此 URL 我们可以推测出有一个名称为 "news" 的控制器,被调用的方法为 "latest","latest" 方法的作用应该是查询10条新闻条目并展示在页面上。 在MVC模式里,你会经常看到下面格式的 URL:

在正式环境下 URL 的格式可能会更复杂,但现在,我们只需要知道这些就够了。

新建一个文件 application/Controllers/Pages.php,然后添加如下代码:

<?php
class Pages extends CodeIgniter\Controller { public function view($page = 'home')
{
}
}

你刚创建了一个 Pages 类,有一个方法 view 并可接受一个 $page 的参数。Pages 类继承自 CodeIgniter\Controller 类,这意味着它可以访问 CodeIgniter\Controller 类 (system/Controller.php) 中定义的方法和变量。

控制器将是你 Web 应用程序中处理请求的核心。和其他的 PHP 类一样,可以在你的控制器中使用 $this 来访问它。

现在,你已经创建了你的第一个方法,是时候创建一些基本的页面模板了。我们将新建两个 "views" (页面模板) 分别作为我们的页头和页脚。

新建页头文件 application/Views/Templates/Header.php 并添加以下代码:

<!doctype html>
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body> <h1><?= $title; ?></h1>

页头包含了一些基本的 HTML 代码,用于展示页面主视图之前的内容。同时,它还打印出了 $title 变量,这个我们之后讲控制器的时候再细说。 现在,再新建个页脚文件 application/Views/Templates/Footer.php,然后添加以下代码:

                <em>&copy; 2016</em>
</body>
</html>

在控制器中添加逻辑

你刚新建的控制器中有一个 view() 方法,这个方法可接受一个用于指定要加载页面的参数。静态页面的模板目录为:application/Views/Pages/

在该目录中,新建 Home.php 和 About.php 模板文件。在每个文件中任意输入一些文本然后保存它们。如果你不知道写什么,那就写 "Hello World!" 吧。

为了加载这些界面,你需要检查下请求的页面是否存在:

public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'/Views/Pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
throw new \CodeIgniter\PageNotFoundException($page);
} $data['title'] = ucfirst($page); // Capitalize the first letter echo view('Templates/Header', $data);
echo view('Pages/'.$page, $data);
echo view('Templates/Footer', $data);
}

当请求的页面存在时,将给用户加载并展示出一个包含页头页脚的页面。如果不存在,会显示 "404 Page not found" 的错误页面。

此事例方法中,第一行用以检查界面是否存在,file_exists() 是原生的 PHP 函数,用于检查某个文件是否存在。PageNotFoundException 是 CodeIgniter 的内置函数,用来展示默认的错误页面。

在页头模板文件中,$title 变量代表页面的自定义标题,它是在方法中被赋值的,但并不是直接赋值给 title 变量,而是赋值给 $data 数组中的 title 元素。

最后要做的就是按顺序加载所需的视图,view() 方法中的参数代表要展示的视图文件名称。$data 数组中的每一个元素将被赋值给一个变量,这个变量的名字就是数组的键值。所以控制器中 $data['title'] 的值,就等于视图中 $title 的值。

路由

控制器已经开始工作了!在你的浏览器中输入 [your-site-url]index.php/pages/view 来查看你的页面。当你访问 index.php/pages/view/about 时你将看到包含页头和页脚的 about 页面。

使用自定义的路由规则,你可以将任意的 URL 映射到任意的控制器和方法上,从而打破默认的规则: http://example.com/[controller-class]/[controller-method]/[arguments]

让我们来试试。打开路由文件 application/Config/Routes.php 然后添加如下两行代码,并删除掉其它对 $route 数组赋值的代码。

$routes->setDefaultController('Pages/view');
$routes->add('(:any)', 'Pages::view/$1');

CodeIgniter 读取路由的规则为从上到下,并将请求映射到第一个匹配的规则。每个规则都是一个正则表达式(左侧)映射到一个控制器和方法(右侧)。当获取到请求时,CodeIgniter 首先查找能匹配到的第一条规则,然后调用相应的可能存在参数的控制器和方法。

你可以在关于 URL路由的文档 中找到更多信息。

路由事例的第二条规则 $routes 数组中使用了通配符 (:any) 来匹配所有的请求,然后将参数传递给 Pages 类的 view() 方法。

为请求默认的控制器,你必须确定当前路由未被定义或重新编写过。默认的路由文件 does 下存在一个处理网站根目录的路由 (/) 规则.删除以下的路由来确保 Pages 控制器可以访问到我们的 home 页面:

$routes->add('/', 'Home::index');

现在访问 index.php/about。路由规则是不是正确的将你带到了控制器中的 view() 方法?太酷了!

[CodeIgniter4]讲解-加载静态页的更多相关文章

  1. flask模板应用-加载静态文件:添加Favicon,使用CSS框架,使用宏加载静态资源

    加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS.JavaScript文件.图片和声音声.在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级 ...

  2. vs 2015 "加载该页时出错。" 解决方案

    错误信息: 加载该页时出错. 未找到与约束   ContractName Microsoft.CodeAnalysis.Editor.TypeScript.ScriptContexts.ITypeSc ...

  3. js引入php 用来加载静态页面 输出到页面中

    HTML页面中加入代码 <script type="text/javascript" src="http://www.域名.com/js.php?id=tjyd&q ...

  4. 在seajs中使用require加载静态文件的问题

    注意,在seajs中使用require加载静态文件时,必须使用常量,不能用变量.如果一定要用变量,请使用require.async var html = require("view/sys/ ...

  5. NDK jni 加载静态库

    加载静态库到android,静态库的提供方式有2种, a. 通过源文件来编译静态库 b. 加载已经编译好的静态库 首先我们来看,通过源文件来编译静态库,工程目录如下 第一步:我们来看我们的jni目录, ...

  6. Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include().

    Django的urls.py加载静态资源图片,TypeError: view must be a callable or a list/tuple in the case of include(). ...

  7. django加载静态文件

    在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件. js 执行文件以及一些图片等,因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 static 标签来 ...

  8. 在ASP.NET MVC中使用jQuery的Load方法加载静态页面的一个注意点

    使用使用jQuery的Load方法可以加载静态页面,本篇就在ASP.NET MVC下实现. Model先行: public class Article { public int Id { get; s ...

  9. Django加载静态网页模板

    Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...

随机推荐

  1. jsplumb 常用事件

    1. jsPlumb.getAllConnections() 获取所有连接线2. jsPlumb.deleteEveryConnection(); 清空所有连接线3. jsPlumb.deleteCo ...

  2. 第三篇 SpringBoot整合log4j2详解

    源代码:https://pan.baidu.com/s/1d1Lwv1gIvVNltIKVWeEseA 提取码:wff0 SpringBoot整合Log4j2步骤: 1.删除spring-boot-s ...

  3. 【Java并发工具类】原子类

    前言 为保证计数器中count=+1的原子性,我们在前面使用的都是synchronized互斥锁方案,加锁独占访问的方式未免太过霸道,于是我们来介绍另一种解决原子性问题的无锁方案:原子变量.在正式介绍 ...

  4. Vue中的递归组件

    递归函数我们都再熟悉不过了,也就是函数自己调用自己.递归组件也是类似的,在组件的template内部使用组件自身.那递归组件有什么使用场景呢? 我们都知道树这个数据结构就是一种递归的结构,因此我们可以 ...

  5. C#设计模式学习笔记:(11)享元模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第六个模式--享 ...

  6. 大白话工厂方法模式(Factory Method)

    目录 简单工厂模式缺陷 简单工厂模式改造 工厂方法模式定义 工厂方法模式结构 工厂方法模式分析 参考文献 简单工厂模式缺陷 大白话简单工厂模式(Simple Factory Pattern)中通过买车 ...

  7. 加速github访问速度

    打开https://www.ipaddress.com/ 查询以下三个链接的DNS解析地址 github.com assets-cdn.github.com github.global.ssl.fas ...

  8. python 學習深淺拷貝、集合、、作用域、函數

    python 學習深淺拷貝.集合..作用域.函數 2020開年新冠肺炎流行大部分人員.工廠.單位無法復工生產,人員隔離每天外出都要戴口罩,在家隔離期間悶壞了感覺把半年的口糧都幹掉了,嚴重考察大家的資本 ...

  9. JSP其余内置对象及四大范围对象的使用

    一.application String getContextPath():获取虚拟路径String getRealPath():获取虚拟路径对应的绝对路径 实例 application.jsp &l ...

  10. Charles老版本教程

    链接:http://pan.baidu.com/s/1c16PxEo  刮开有奖->密码:dbml 初级篇: 1.1设置代理 1.2参数设置+界面介绍 1.3屏蔽多余数据 1.4请求重发 1.5 ...