CodeIgniter 路由:带有示例的 URL 路由
CodeIgniter 路由是什么?
路由负责响应 URL 请求。路由会将 URL 匹配到预定义的路由。如果没有找到匹配的路由,CodeIgniter 将会抛出“页面未找到”异常。
CodeIgniter 中的路由使用以下公式定义
example.com/Controller/Method/Parameter/
此处,
- Controller - 映射到应该响应 URL 的控制器名称。
- Method – 映射到控制器中应该响应 URI 请求的方法。
- Parameter – 此部分是可选的。
CodeIgniter 路由示例
现在,让我们通过一个 CodeIgniter 的实际 URL 路由示例来了解一下。 CodeIgniter
考虑以下 URL https://:3000/contacts/edit/1
此处,
- 响应上述 URL 的控制器名称是“contacts”
- Contacts 控制器类中的方法是“edit”
- edit 方法接受一个参数。在我们的示例中,“1”的值被传递给该方法。
以下是我们计划做的事情的简要背景
- 路由 – 路由负责响应 URL 请求。CodeIgniter 路由会将 URL 匹配到预定义的路由。如果没有找到匹配的路由,CodeIgniter 将会抛出“页面未找到”异常。
- 控制器 – 路由链接到控制器。控制器将模型和视图粘合在一起。控制器从模型请求数据/业务逻辑,并通过视图表示层返回结果。一旦 URL 与 CodeIgniter 中的路由匹配,它就会被转发到一个控制器公共函数,该函数与数据源、业务逻辑交互,并返回显示结果的视图。
- 视图 – 视图负责表示。视图通常是 HTML、CSS 和 JavaScript 的组合。这是负责向用户显示网页的部分。通常,显示的数据通常是从数据库或任何其他可用数据源检索的。
要学习如何在实际项目中实现路由器,我们将假设我们正在创建一个管理联系人信息的应用程序。下表显示了我们将要处理的 URL。
序号 | URL | 路由 | 控制器 | 方法 |
---|---|---|---|---|
1 | / | $route[‘default_controller’] | Welcome | index |
2 | /contacts | $route[‘contacts’] | Contacts | index |
3 | /contacts/create | $route[‘create’] | Contacts | create |
4 | /contacts/edit/id | $route[‘edit/:id’] | Contacts | edit |
5 | /contacts/update/id | $route[‘update/:id’] | Contacts | update |
6 | /contacts/delete/id | $route[‘delete/:id’] | Contacts | 删除 |
我们将在上述表格的基础上创建应用程序的路由。我们已经定义了 URL、CodeIgniter 路由,并将它们映射到相应的控制器和方法名。
为应用程序创建 URL 路由
让我们为我们的教程项目创建 CodeIgniter URL 路由
打开 application/config/routes.php
修改路由以匹配以下内容
$route['default_controller'] = 'welcome'; $route['contacts'] = 'contacts'; $route['create'] = 'contacts/create'; $route['edit/:id'] = 'contacts/edit'; $route['update/:id'] = 'contacts/update'; $route['delete/:id'] = 'contacts/delete'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
此处,
- $route[‘default_controller’] = ‘welcome’; 定义默认控制器 Welcome。
- $route[‘contacts’] = ‘contacts’; 定义一个 contacts 路由,该路由调用 Contacts 控制器中的 index 方法
- $route[‘create’] = ‘contacts/create’; 定义一个 create 路由,该路由指向 Contacts 控制器并调用 create 方法。
- $route[‘edit/:id’] = ‘contacts/edit’; 定义一个 edit 路由,该路由接受一个 id 参数,并指向 Contacts 控制器的 edit 方法
- $route[‘update/:id’] = ‘contacts/update’; 定义一个 update 路由,该路由接受一个 id 参数,并指向 Contacts 类的 update 方法。
- $route[‘delete/:id’] = ‘contacts/delete’; 定义一个 delete 路由,该路由接受一个 id 参数,并指向 Contacts 控制器的 delete 方法。
下表显示了从上述定义的路由派生的相应 URL
序号 | 路由 | 相应的 URL |
---|---|---|
1 | $route[‘default_controller’] = ‘welcome’; | https://:3000 |
2 | $route[‘contacts’] = ‘contacts’; | https://:3000/contacts |
3 | $route[‘create’] = ‘contacts/create’; | https://:3000/contacts/create |
4 | $route[‘edit/:id’] = ‘contacts/edit’; | https://:3000/contacts/edit/1 |
5 | $route[‘update/:id’] = ‘contacts/update’; | https://:3000/contacts/update/1 |
6 | $route[‘delete/:id’] = ‘contacts/delete’; | https://:3000/contacts/delete/1 |
现在我们已经涵盖了路由,让我们创建将响应路由中指定的动作的 Contacts 控制器。
在 application/controllers/Contacts.php 中创建一个新的 CodeIgniter Route 文件 Contacts.php
添加以下代码:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Contacts extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('url'); } public function index() { $this->load->view('header'); $this->load->view('contacts/index'); $this->load->view('footer'); } public function create() { $this->load->view('header'); $this->load->view('contacts/create'); $this->load->view('footer'); } public function edit($id) { $this->load->view('header'); $this->load->view('contacts/edit'); $this->load->view('footer'); } public function update($id) { $this->load->view('header'); $this->load->view('contacts/update'); $this->load->view('footer'); } public function delete($id) { $this->load->view('header'); $this->load->view('contacts/delete'); $this->load->view('footer'); } }
此处,
- Class contacts extends CI_Controller {..} 定义了我们的控制器类,并扩展了 CodeIgniter 自带的 CI_Controller 类。
- 上面定义的方法对应我们定义的路由,而带有参数的方法(如 delete)则接受 $id 参数
- 请注意,这些函数加载了三个(3)个视图。标题和页脚对所有方法都是通用的。中间视图非常特定于操作,即 delete 函数用于删除,create 函数用于创建视图,依此类推。另一个要记住的重要事项是,视图是从 contacts 子目录加载的。
CodeIgniter 视图
在测试 CodeIgniter 路由和参数在浏览器中的显示效果之前,我们还需要再进行一步。让我们创建与上述控制器方法对应的视图。
下图显示了您的应用程序的外观
在 application/views 中创建以下文件
header.php – this file will contain contacts app menu and the header footer.php – this files will contain the application footer.
在 views application/views/contacts 中创建一个新的 contacts 目录
在里面创建以下文件
index.php create.php edit.php
您的文件结构应如下所示
现在让我们更新 header.php
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>CodeIgniter Routes</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css"> <script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script> </head> <body> <section class="section"> <div class="container"> <h1 class="title">CI Contacts v1</h1> <h2 class="subtitle">CodeIgniter contacts management app</h2> <div class="columns"> <div class="column is-one-quarter"> <aside class="menu"> <p class="menu-label"> General </p> <ul class="menu-list"> <li><a class="is-active" href="#">Dashboard</a></li> <li><a href="<?=site_url('contacts/create')?>">New Contact</a></li> <li><a href="<?=site_url('contacts/edit/1')?>">Edit Contacts</a></li> </ul> <p class="menu-label"> Settings </p> <ul class="menu-list"> <li><a href="#">SMS</a></li> <li><a href="#">Email</a></li> </ul> </aside> </div>
此处,
- 上述 HTML 代码从 CDN 网络加载 Burma CSS。
以下是 footer.php 的代码
</div> </div> </section> </body> </html>
现在让我们为 contacts 添加 index.php、edit.php 和 create.php 文件的代码。
index.php <div class="column">Index content goes here...</div> edit.php <div class="column">Edit content goes here...</div> create.php <div class="column">Create content goes here...</div>
您可以保存所有所做的更改。
在浏览器中打开以下 URL https://:3000/contacts/
您可以点击“New Contact”和“Edit Contact”链接,看看会发生什么
摘要
- CI 中的路由负责响应 URL 请求。路由会将 URL 匹配到预定义的路由。如果没有找到 CodeIgniter 路由匹配,CodeIgniter 将会抛出“页面未找到”异常。
- CI 路由负责响应 URL 请求。路由会将 URL 匹配到预定义的路由。
- 控制器将模型和视图粘合在一起。控制器从模型请求数据/业务逻辑,并通过视图表示层返回结果。
- 视图负责表示。视图通常是 HTML、CSS 和 JavaScript 的组合。
- 在本教程中,我们学习了如何在 CodeIgniter 中为实际应用创建路由,并介绍了您开始开发 CodeIgniter 所需的路由基础知识。