我们来看一下CI4框架的默认页面是如何实现的。
我们先来认识一下路由文件(app\Config\Routes.php),这个文件非常重要,且功能强大,它定义了URL模式及响应处理方法,我们先看一下这个文件的部分内容。
1 /** 2 * -------------------------------------------------------------------- 3 * Router Setup 4 * -------------------------------------------------------------------- 5 */ 6 $routes->setDefaultNamespace('App\Controllers'); // 设置默认的命名空间 7 $routes->setDefaultController('Home'); // 设置默认的控制器 8 $routes->setDefaultMethod('index'); // 设置默认的方法 9 $routes->setTranslateURIDashes(false); 10 $routes->set404Override(); 11 $routes->setAutoRoute(true); 12 13 /** 14 * -------------------------------------------------------------------- 15 * Route Definitions 16 * -------------------------------------------------------------------- 17 */ 18 19 // We get a performance increase by specifying the default 20 // route since we don't have to scan directories. 21 $routes->get('/', 'Home::index'); // 设置访问网站根目录时通过Home控制器的index方法响应
我们可以看到上面代码通过2种方式定义了默认页面
1. 定义默认控制器为Home,默认方法为index
2. 定义路由匹配 “/” 时通过控制器Home的index方法响应
思考一下,如果以上两种方法定义的不一致,哪个优先级更高呢?我们来修改一下代码
1 /** 2 * -------------------------------------------------------------------- 3 * Router Setup 4 * -------------------------------------------------------------------- 5 */ 6 $routes->setDefaultNamespace('App\Controllers'); 7 $routes->setDefaultController('Home'); 8 $routes->setDefaultMethod('index'); 9 $routes->setTranslateURIDashes(false); 10 $routes->set404Override(); 11 $routes->setAutoRoute(true); 12 13 /** 14 * -------------------------------------------------------------------- 15 * Route Definitions 16 * -------------------------------------------------------------------- 17 */ 18 19 // We get a performance increase by specifying the default 20 // route since we don't have to scan directories. 21 $routes->get('/', function () { 22 echo '第一个页面'; 23 });
刷新页面,发现输出 “第一个页面”,证明定义路由的优先级更高。
我们再来看一下Home控制器(app\Controllers\Home.php)
1 php 2 3 namespace App\Controllers; 4 5 class Home extends BaseController 6 { 7 public function index() 8 { 9 return view('welcome_message'); 10 } 11 }
里面只有一个index方法,返回了一个视图模板welcome_message,我们再来添加一个方法
1 php 2 3 namespace App\Controllers; 4 5 class Home extends BaseController 6 { 7 public function index() 8 { 9 return view('welcome_message'); 10 } 11 12 public function welcome() 13 { 14 echo 'welcome to codeigniter 4!'; 15 } 16 }
我们来访问一下 /home/welcome, 看下页面效果
我们再添加一条路由规则
1 /** 2 * -------------------------------------------------------------------- 3 * Route Definitions 4 * -------------------------------------------------------------------- 5 */ 6 7 // We get a performance increase by specifying the default 8 // route since we don't have to scan directories. 9 $routes->get('/', function () { 10 echo '第一个页面'; 11 }); 12 $routes->get('/welcome.html', 'Home::welcome');
我们再访问一下 /welcome.html, 可以看到一样的页面内容, 一不小心实现了页面静态化呢!