CodeIgniterのルーティングからコントローラを取り除く

CodeIgniter のようなPHPフレームワークでは、全てのURIへのアクセスをフロントコントローラ(index.php)が受け持つのが一般的です。

フロントコントローラは、リクエストされたパスやクエリ文字によって処理すべきクラスやアクションを決定します。

このような処理の流れを「ルーティング」と言います。

ここではCodeIgniterのルーティング処理やURIについて解説していきます。

スポンサーリンク

CodeIgniterのデフォルトルーティング

CodeIgniterのデフォルトでは以下のようなルーティングが行われています。

http://example.com/index.php/[コントローラ]/[アクション]/[パラメータ1]/[パラメータ2]/

このうち、/index.php/部分を削除する方法については、以下の記事をご覧ください。

CodeIgniter のルーティングからindex.phpを削除する。
CodeIgniterがデフォルトの状態でのルーティング処理は、以下のようなURIになります。 ドメインの後に/index.php/という文字列が入ってしまい、URIが長くなる上SEO的にも望ましくありません。 そこで、ここでは...

デフォルトルーティングは複数コントローラ前提

CodeIgniterのデフォルトルーティングで運用すると、問合せページを「http://example.com/contact/」としたい場合はContact用のコントローラクラスを作る必要が出てきます。

小規模なサイトの場合1つのコントローラで事足りてしまうこともありますので、この挙動を変えてしまいたいところ。

CodeIgniterで全てのアクションを一つのコントローラが受け持つには

そういった場合にはCodeIgniterのルーティングを設定することで、全てのアクションを一つのコントローラにまとめることができます。

ルーティングを制御しているのはconfig内のroute.phpになりますので、CodeIgniterのapplicationディレクトリ内のconfig>route.phpに以下のように変更します。

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

↓

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
// 以下を追記
$route['(:any)'] = $route['default_controller'] . '/$1';

追記された行は「全てのアクセスをデフォルトコントローラで受け持つ」という設定になります。

この設定により、welcomeコントローラで全てのアクションを受け持つことができ、問合せページを「http://example.com/contact/」としてアクセスしたい場合には、Welcomeクラスにcontactメソッドを実装すれば良いことになります。

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

class Welcome extends CI_Controller {

    /**
     * http://example.com/
     */
    public function index()
    {
        // index用の処理
    }

    /**
     * http://example.com/contact/
     */
    public function contact()
    {
        // contact用の処理
    }
}

 

コメント

タイトルとURLをコピーしました