CodeIgniter 路由:带示例的 URL 路由
什么是 CodeIgniter 路线?
路由负责响应 URL 请求。路由将 URL 与预定义的路由进行匹配。如果未找到路由匹配,则 CodeIgniter 会抛出页面未找到异常。
CodeIgniter 中的路由使用以下公式定义:
example.com/Controller/Method/Parameter/
这里,
- 控制器 - 映射到应该响应 URL 的控制器名称。
- 方法 – 映射到控制器中应响应 URI 请求的方法。
- 参数——此部分是可选的。
CodeIgniter 路由示例
现在让我们看一个实用的 URL 路由 笨 例。
考虑以下 URL http://localhost:3000/contacts/edit/1
这里,
- 响应上述 URL 的控制器名称是“contacts”
- 控制器类 Contacts 中的方法是“edit”
- edit 方法接受一个参数。在我们的示例中,将值“1”传递给该方法。
以下是我们计划做的简要背景:
- 路由 – 路由负责响应 URL 请求。CodeIgniter 路由将 URL 与预定义的路由进行匹配。如果未找到路由匹配,则 CodeIgniter 会抛出页面未找到异常。
- 控制器 – 路由与控制器相连。控制器将模型和视图粘合在一起。从模型中请求数据/业务逻辑并通过视图表示返回结果。一旦 URL 与 CodeIgniter 中的路由匹配,它就会转发到控制器公共函数,该函数与数据源、业务逻辑交互并返回显示结果的视图。
- 观看数 – 视图负责呈现。视图通常是 HTML、CSS 和 JavaScript。这是负责向用户显示网页的部分。通常,显示的数据通常是从数据库或任何其他可用数据源检索的。
为了了解如何在实际项目中实现路由器,我们假设我们正在创建一个用于管理联系人详细信息的应用程序。下表显示了将要使用的 URL。
S / N | 网址 | 路线 | 控制器 | 付款方式 |
---|---|---|---|---|
1 | / | $route['默认控制器'] | 欢迎 | 指数 |
2 | /联系人 | $route['联系人'] | 联系我们 | 指数 |
3 | /联系人/创建 | $route['创建'] | 联系我们 | 创建信息图 |
4 | /联系人/编辑/id | $route['编辑/:id'] | 联系我们 | 编辑 |
5 | /联系人/更新/id | $route['更新/:id'] | 联系我们 | 更新 |
6 | /联系人/删除/id | $route['删除/:id'] | 联系我们 | 删除 |
我们将根据上表创建应用程序的路由。我们定义了 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'; 定义一个联系人路由,该路由调用联系人控制器中的 index 方法
- $route['create'] = 'contacts/create'; 定义一个路由创建,指向联系人控制器并调用创建方法。
- $route['edit/:id'] = 'contacts/edit'; 定义一个路由编辑,它接受 id 参数并指向 Contacts 控制器的 edit 方法
- $route['update/:id'] = 'contacts/update'; 定义一个路由更新,它接受 id 参数并指向 Contacts 类的更新方法。
- $route['delete/:id'] = 'contacts/delete'; 定义一个路由删除,它接受 id 参数并指向 Contacts 控制器的 delete 方法。
下表显示了从上述定义的路由派生的各个 URL
S / N | 路线 | 对应网址 |
---|---|---|
1 | $route['default_controller'] = '欢迎'; | http://localhost:3000 |
2 | $route['contacts'] = '联系人'; | http://localhost:3000/contacts |
3 | $route['创建'] = '联系人/创建'; | http://localhost:3000/contacts/create |
4 | $route['编辑/:id'] = '联系人/编辑'; | http://localhost:3000/contacts/edit/1 |
5 | $route['更新/:id'] = '联系人/更新'; | http://localhost:3000/contacts/update/1 |
6 | $route['delete/:id'] = '联系人/删除'; | http://localhost:3000/contacts/delete/1 |
现在我们已经介绍了路线,让我们创建响应路线中指定的操作的联系人控制器。
在 CodeIgniter 中创建一个新的路由文件,即 application/controllers/Contacts.php 中的 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'); } }
这里,
- 类 contacts 扩展 CI_Controller {..} 定义我们的控制器类并扩展 CodeIgniter 附带的 CI_Controller 类。
- 上面定义的方法与我们定义的路由相对应,带有参数的方法(如 delete)接受 $id 参数
- 请注意,函数会加载三个 (3) 个视图。页眉和页脚对于所有方法都是通用的。中间视图非常特定于操作,即删除函数的删除、创建函数的视图等。需要记住的另一件重要事情是,视图是从联系人子目录中加载的。
CodeIgniter 视图
在 Web 浏览器中测试带参数的 CodeIgniter 路由之前,我们还需要采取进一步的措施。让我们创建上述控制器方法的相应视图。
下图显示了您的应用程序的外观
在 application/views 中创建以下文件
header.php – this file will contain contacts app menu and the header footer.php – this files will contain the application footer.
在视图 application/views/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>
现在让我们添加联系人的 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>
您可以保存所做的所有更改。
在 Web 浏览器中打开以下 URL http://localhost:3000/contacts/
您可以点击“新建联系人”和“编辑联系人”链接,看看会发生什么
总结
- CI 中的路由负责响应 URL 请求。路由将 URL 与预定义的路由进行匹配。如果未找到 CodeIgniter 路由匹配,则 CodeIgniter 会抛出页面未找到异常。
- CI 路由负责响应 URL 请求。路由将 URL 与预定义的路由进行匹配。
- 控制器将模型和视图粘合在一起。从模型请求数据/业务逻辑并通过视图表示返回结果。
- 视图负责呈现。视图通常是 HTML、CSS 和 Java脚本。
- 在本教程中,我们学习了如何为真实示例应用程序在 CodeIgniter 中创建路由,并介绍了开始开发 CodeIgniter 所需了解的路由基础知识。