ルーティングのアップグレード

ドキュメント

変更点

  • 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'); に変更します。これは、Blogs コントローラーの index() メソッドにマッピングされます。

    • $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() が使用されています。しかし、セキュリティ上の理由から、$routes->add() の代わりに HTTP 動詞ルート (例: $routes->get())を使用することを強くお勧めします。

コード例

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() が使用されています。しかし、セキュリティ上の理由から、$routes->add() の代わりに HTTP 動詞ルート (例: $routes->get())を使用することを強くお勧めします。