升级路由

文档

更改内容

  • 在 CI4 中,自动路由默认禁用。

  • 在 CI4 中,引入了新的更安全的 自动路由(改进版)

  • 在 CI4 中,不再通过将路由设置为数组来配置路由。

  • CI3 中的通配符 (:any) 在 CI4 中将成为占位符 (:segment)。CI4 中的 (:any) 匹配多个片段。请参阅 URI 路由

升级指南

  1. 如果您以与 CI3 相同的方式使用自动路由,则需要启用 自动路由(旧版)

  2. 您必须更改每条路由行的语法,并将其附加在 app/Config/Routes.php 中。例如

    • $route['journals'] = 'blogs';$routes->add('journals', 'Blogs::index');。这将映射到 index() 方法中的 Blogs 控制器。

    • $route['product/(:any)'] = 'catalog/product_lookup';$routes->add('product/(:segment)', 'Catalog::productLookup');。不要忘记将 (:any) 替换为 (:segment)

    • $route['login/(.+)'] = 'auth/login/$1';$routes->add('login/(.+)', 'Auth::login/$1');

    注意

    为了向后兼容,这里使用了 $routes->add()。但我们强烈建议使用 HTTP 动词路由,例如 $routes->get() 而不是 $routes->add() 以确保安全性。

代码示例

CodeIgniter 版本 3.x

路径:application/config/routes.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

// ...

$route['posts/index']  = 'posts/index';
$route['teams/create'] = 'teams/create';
$route['teams/update'] = 'teams/update';

$route['posts/create']   = 'posts/create';
$route['posts/update']   = 'posts/update';
$route['drivers/create'] = 'drivers/create';
$route['drivers/update'] = 'drivers/update';
$route['posts/(:any)']   = 'posts/view/$1';

CodeIgniter 版本 4.x

路径:app/Config/Routes.php

<?php

use CodeIgniter\Router\RouteCollection;

/**
 * @var RouteCollection $routes
 */
$routes->get('/', 'Home::index');

$routes->add('posts/index', 'Posts::index');
$routes->add('teams/create', 'Teams::create');
$routes->add('teams/update', 'Teams::update');

$routes->add('posts/create', 'Posts::create');
$routes->add('posts/update', 'Posts::update');
$routes->add('drivers/create', 'Drivers::create');
$routes->add('drivers/update', 'Drivers::update');
$routes->add('posts/(:segment)', 'Posts::view/$1');

注意

为了向后兼容,这里使用了 $routes->add()。但我们强烈建议使用 HTTP 动词路由,例如 $routes->get() 而不是 $routes->add() 以确保安全性。