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 路由之前,我们还需要采取进一步的措施。让我们创建上述控制器方法的相应视图。

下图显示了您的应用程序的外观

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

您的文件结构应如下

CodeIgniter 视图

现在让我们更新 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 所需了解的路由基础知识。