このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0249

CI_Router

 CI_Routerクラスもまた、CI_URIクラスと共にバックグラウンドでその機能を発揮しています。
クライアントからリクエストされたURIを基に、または、ユーザがカスタマイズ設定したルーティング設定情報から 処理を託すコントローラーとアクションメソッドを決定します。

 CodeIgniterではコントローラ名(class名)とアクションメソッド名(function名)が同一(class名の先頭文字が大文字の違いも含む)の場合、 CI_Routerクラスによって、アクションメソッドは「index()」として強制的にルーティングされます。
 設計段階で、コントローラと同名のアクションメソッドを作ることは控えるようにしてください。

    http://your.site/welcome/welcome/

     上記リクエストでは、「Welcome」コントローラクラスの「index()」メソッドが実行されます。

URIルーティングのオーバーライド($routing)

 フロントコントローラ(index.php)に、コメントアウトされた以下の3行があります。

    // $routing['directory'] = '';
    // $routing['controller'] = '';
    // $routing['function'] = '';

 これらは、CI_Routerの本来のURIルーティングを上書きして、全てのリクエストを強制的に 上記の設定したコントローラとアクションメソッドにルーティングしてしまう設定です。
メンテナンスページ用のコントローラクラスを作成しておき、メンテナンスページを表示させる場合などに使います。
以下にメンテナンスページ表示のサンプルを示します。

  • application/views/maintenance.php
  • <html>
        <head>
        <title>メンテナンス中</title>
        </head>
        <body>
            メンテナンス中です・・・
        </body>
    </html>
                            
  • application/controllers/maintenance.php
  • <?php
    
    class Maintenance extends CI_Controller {
        public function __construct()
        {
            parent::__construct();
        }
    
        public function index()
        {
            $this->load->view('maintenance');
        }
    }
                            
  • index.php
  • $routing['controller'] = 'maintenance';
    $routing['function'] = 'index';

 このように、メンテナンスページ用のコントローラクラスを作成し、フロントコントローラ(index.php)で「$routing」の設定をすることで 全てのリクエストに対しメンテナンスページを表示します。

CI_Routerの提供する機能

CI_Routerクラスが提供する機能について説明します。

fetch_class() 一番上に戻る

     CI_Routerクラスによってルーティングされたコントローラクラス名を返します。
    application/config/routes.php」によっては、 URIパスの第一セグメントがコントローラクラスになるとは限りません。
    実際に読み込まれるコントローラクラス名を返します。

fetch_method() 一番上に戻る

     CI_Routerクラスによってルーティングされたアクションメソッド名を返します。
    「application/config/routes.php」によっては、URIパスの第二セグメントがアクションメソッドになるとは限りません。
    実際に読み込まれるアクションメソッド名を返します。

fetch_directory() 一番上に戻る

     CI_Routerクラスによってルーティングされたコントローラクラスファイルが設置してあるサブディレクトリ名を返します。
    コントローラクラスが「application/controllers」ディレクトリ直下にある場合は、空文字を返します。 取得したサブディレクトリ名には、文字列の末尾に「/」スラッシュが付いています。

    http://your.site/myclass/
    $dir = $this->router->fetch_directory();
    //=> (空文字)
    • サブディレクトリ
    http://your.site/subdir/myclass/
    $dir = $this->router->fetch_directory();
    //=> subdir/