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

更新日: 2016年2月25日

実行時間: 0.0077

コントローラ

CodeIgniterでは、他のMVCフレームワークと違い縛りがゆるくなっています。MVCをうたってはいますが 実際には最低限必要なものはコントローラのみとなります。モデルやビューは必須ではありません。

コントローラファイルの設置場所・ファイル名

コントローラファイルの設置場所は「application/controllers」ディレクトリの配下となり、ファイル名はURIの最初のパス文字列に「.php」拡張子を付けたものとなります。

  • URIパス「shop」
  • http://your.site/shop/
  • ファイルパス「shop.php」
  • /var/www/vhosts/webapp/application/controllers/shop.php

コントローラクラス

 コントローラファイルはオブジェクト指向でいうところのクラスファイルとなります。  従いまして、PHPのクラスファイル記述方式に沿ったコーディングを行うことになります。  クラス名はURIパス文字列の最初の文字を大文字にします。

  • クラス名「Shop」
  • class Shop
    {
        // プロパティやメソッド
    }

 上記の例でも動作させることは可能ですが、CodeIgniterの機能を利用することができません。CodeIgniterのコアクラスをオーバーライドすることで、様々なCodeIgniterの機能を利用することができるようになります。

  • 「CI_Controller」コアクラスのオーバーライド
  • class Shop extends CI_Controller
    {
        // プロパティやメソッド
    }

デフォルトコントローラ 一番上に戻る

 URIパスの指定が無かった場合に呼ばれるコントローラをデフォルトコントローラと言います。
インストールした直後の初期設定では「welcome.php」つまり、「Welcomeクラス」がデフォルトコントローラとして設定されています。

    http://your.site/   -->    http://your.site/welcome/

 デフォルトコントローラを変更するには、「application/config/routes.php」設定ファイルで設定します。 設定項目変数「 $route['default_controller']」にクラスファイル名から「.php」を取ったものをセットします。 下記の例では、「index.php」クラスファイルの「Indexクラス」をデフォルトコントローラとして設定しています。

  • application/config/routes.php
  • // $route['default_controller'] = "welcome";
    $route['default_controller'] = "index";

コンストラクタ 一番上に戻る

 コンストラクタは、設定ファイルのロードやプロパティの初期化など、各メソッドが実行される前の共通処理を行うのに利用されます。 通常は、CodeIgniterのコアコントローラクラスをオーバーライドしていますので下記のように必ず親クラスのコンストラクタを呼び出してから、独自の処理を記述していきます。

  • コンストラクタ
  • class Shop extends CI_Controller
    {
        public function __construct()
        {
            parent::__construct();

            // 独自処理
        }
    }

アクションメソッド 一番上に戻る

 URIパスでコントローラの次に指定されるものが、そのコントローラクラスのメソッドに当たります。

    http://your.site>/shop/greet/

 上記のURIパスにアクセスすると、「greet()」メソッドが処理されることになります。
下記のサンプルコードでは、ブラウザに「Hellow, world.」と出力されます。

    class Shop extends CI_Controller
    {
        private $_user;

        public function __construct()
        {
            parent::__construct();

            $this->_user = 'ゲストさん';
        }

        public function greet()
        {
            echo 'Hello, ' . $this->_user . '.';
        }
    }

パラメータ 一番上に戻る

 アクションメソッドを示すパスにつづくURIパスは、パラメータとしてアクションメソッドにその文字列を引数として渡すことができます。

    http://your.site/shop/greet/Yamada/Taro/

 以下がサンプルコードになります。

  • application/controllers/shop.php
  • class Shop extends CI_Controller
    {
        private $_user;

        public function __construct()
        {
            parent::__construct();
            $this->_user = 'ゲストさん';
        }

        public function greet($surname=NULL, $firstname=NULL)
        {
            if ( is_null($surname) ) {
               echo 'Hello, ' . $this->_user . '.';
            } else {
               echo 'Hello, ' . $surname;
                if ( ! is_null($firstname) ) {
                    echo ' ' . $firstname;
                }
            }
        }
    }

 アクションメソッドに渡すパラメタ引数には、必ずデフォルト値をセットするようにしましょう。
URIにパラメータがセットされずにアクセスされるとログにWarningが出力されてしまいます。

  • application/logs/log-yyyy-mm-dd.php
  • Severity: Warning --> Missing argument 1 for Shop::greet()
    Severity: Warning --> Missing argument 2 for Shop::greet()