我们来看一下CI4框架的默认页面是如何实现的。

我们先来认识一下路由文件(app\Config\Routes.php),这个文件非常重要,且功能强大,它定义了URL模式及响应处理方法,我们先看一下这个文件的部分内容。

 /**
* --------------------------------------------------------------------
* Router Setup
* --------------------------------------------------------------------
*/
$routes->setDefaultNamespace('App\Controllers'); // 设置默认的命名空间
$routes->setDefaultController('Home'); // 设置默认的控制器
$routes->setDefaultMethod('index'); // 设置默认的方法
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true); /**
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/ // We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Home::index'); // 设置访问网站根目录时通过Home控制器的index方法响应

我们可以看到上面代码通过2种方式定义了默认页面

1. 定义默认控制器为Home,默认方法为index

2. 定义路由匹配 “/” 时通过控制器Home的index方法响应

思考一下,如果以上两种方法定义的不一致,哪个优先级更高呢?我们来修改一下代码

 /**
* --------------------------------------------------------------------
* Router Setup
* --------------------------------------------------------------------
*/
$routes->setDefaultNamespace('App\Controllers');
$routes->setDefaultController('Home');
$routes->setDefaultMethod('index');
$routes->setTranslateURIDashes(false);
$routes->set404Override();
$routes->setAutoRoute(true); /**
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/ // We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', function () {
echo '第一个页面';
});

刷新页面,发现输出 “第一个页面”,证明定义路由的优先级更高。

我们再来看一下Home控制器(app\Controllers\Home.php)

 <?php

 namespace App\Controllers;

 class Home extends BaseController
{
public function index()
{
return view('welcome_message');
}
}

里面只有一个index方法,返回了一个视图模板welcome_message,我们再来添加一个方法

 <?php

 namespace App\Controllers;

 class Home extends BaseController
{
public function index()
{
return view('welcome_message');
} public function welcome()
{
echo 'welcome to codeigniter 4!';
}
}

我们来访问一下 /home/welcome, 看下页面效果

我们再添加一条路由规则

 /**
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/ // We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', function () {
echo '第一个页面';
});
$routes->get('/welcome.html', 'Home::welcome');

我们再访问一下 /welcome.html, 可以看到一样的页面内容, 一不小心实现了页面静态化呢!

CI4框架应用四 - 第一个页面的更多相关文章

  1. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  2. Flask框架 (四)—— 请求上下文源码分析、g对象、第三方插件(flask_session、flask_script、wtforms)、信号

    Flask框架 (四)—— 请求上下文源码分析.g对象.第三方插件(flask_session.flask_script.wtforms).信号 目录 请求上下文源码分析.g对象.第三方插件(flas ...

  3. CI4框架应用五 - 加载视图

    这节我们来看一下CI4框架中视图的加载, CI4中提供了几种方式加载视图. 1. 利用CI4框架提供的全局函数view(‘模板名’),如果需要传参数可以在第二个参数传一个数组 我们先修改一下之前定义的 ...

  4. 《Symfony 5全面开发》教程03、使用Controller创建第一个页面

    我们使用Phpstorm打开我们的项目目录,展开项目目录文件夹. Symfony项目其实也是composer项目,如果你新拿到一个Symfony项目, 你可以在控制台中使用composer insta ...

  5. JavaScript框架设计(四) 字符串选择器(选择器模块结束)

    JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...

  6. 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...

  7. 搭建SpringBoot+dubbo+zookeeper+maven框架(四)

    今天我们完成框架的thymeleaf模板显示页面功能,页面的用户登陆,密码的AES加密解密,输错3次进行验证码验证功能,东西可能比较多,这个是我这两天在网上结合各种资源整合出来的,基本功能都已经实现, ...

  8. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面

    摘要      本文首先一步一步完成Demo的第一个页面——首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来      现在,我们来实现公告系统 ...

  9. 浅入深出Vue:第一个页面

    今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考 ...

随机推荐

  1. CSS(六)- 内容布局 - Flexbox

    Flexbox是CSS3提供的用于布局的一套新属性,是为了应对行内块.浮动和表格格式产生的问题而生的.其包含针对容器(弹性容器,flex container)和针对其直接子元素(弹性项,flex it ...

  2. scrapy(三):post请求

    -- coding: utf-8 -- ''' QiuBai.py 爬虫文件 ''' -- coding: utf-8 -- import scrapy class PostSpider(scrapy ...

  3. scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合

    1 流 Stream stream是一个集合.这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果 ...

  4. Scala 面向对象(七):静态属性和静态方法

    1 Scala中静态的概念-伴生对象 Scala语言是完全面向对象(万物皆对象)的语言,所以并没有静态的操作(即在Scala中没有静态的概念). 但是为了能够和Java语言交互(因为Java中有静态概 ...

  5. 数据库02 /MySQL基础数据类型、完整性约束、sql_mode模式

    2.MySQL基础数据类型.完整性约束.sql_mode模式 目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 MySQL常用数据类型预览 1. 1 数 ...

  6. java 基本语法(四) 流程控制(一) 分支结构

    if(条件表达式){ 执行表达式} 结构二:二选一if(条件表达式){ 执行表达式1}else{ 执行表达式2} 结构三:n选一if(条件表达式){ 执行表达式1}else if(条件表达式){ 执行 ...

  7. 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理

    https://zhuanlan.zhihu.com/p/96823622 ​开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...

  8. cmake安装使用

    1.安装命令: yum install -y gcc gcc-c++ make automake wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2 ...

  9. 设计模式:mediator模式

    目的:解决多组件之间的通信问题,使得组件之间的通信变得简单 核心:提供一个管理类,用来处理组件之间的通信,所有的组件只和管理类通信,组件彼此之间不在单独通信 例子: class Mediator { ...

  10. Java 异常处理专题,从入门到精通

    内置异常和Throwable核心方法 Java内置异常 可查异常(必须要在方法里面捕获或者抛出) ClassNoFoundException 应⽤程序试图加载类,找不到对应的类 IllegalAcce ...