Controller

コントローラってなんぞ

参照:コントローラ : CodeIgniter ユーザガイド 日本語版

コントローラは、名前が URI に関連付けられたクラスファイルです。
次のような URI があったとします:
example.com/index.php/blog/
上の例では、CodeIgniter は blog.php という名前のコントローラを探して読み込もうとします。
コントローラの名前がURIの最初のセグメントに一致した場合、それが読み込まれます。

セグメントってなんぞや

example.com/index.php/blog/shoes/123/

blog が第一セグメント
shoes が第二セグメント
123 が第三セグメント

  • blog.php というコントローラファイルを作り、保存した場合

ファイルの位置とURL

application/controllers/blog.php   # ファイルの置く位置
example.com/index.php/blog/        # URL

index.php.htaccessをいじって無くすことも可能らしい。
けど、現時点でやり方が不明!

Note : クラス名は"必ず"大文字から始めなくてはけない。
またコントローラは親コントローラクラスを継承(extends)するのを忘れずに。

# これは正しい
class Blog extends CI_Controller {
}
# これは正しくない
class blog extends CI_Controller {
}

メソッド

URI の第2セグメントは、コントローラ内のどのメソッドが呼ばれるかを決める
第二セグメントが空の時に常に呼ばれるメソッドがindex()

<?php
class Blog extends CI_Controller {
	public function index() {
		echo 'Hello World!';
	}
	public function comments() {
		echo 'Look at this!';
	}
}
?>

example.com/index.php/blog/ の場合 index() メソッドを呼び出し
example.com/index.php/blog/comments/ の場合 comments() メソッドを呼び出し

URLに3つ以上セグメントが含まれる場合3番目以降のセグメントはメソッドに引数として渡される
例)example.com/index.php/products/shoes/sandals/123

URI の3番目と4番目のセグメント ("sandals" と"123")がメソッドに渡される:

<?php
class Products extends CI_Controller {
    public function shoes($sandals, $id){
        echo $sandals;
        echo $id;
    }
}
?> 

example.com/index.php/products/shoes/test/456 の場合
test456と表示されると。

コンストラクタを使用する場合は”必ず”次の行をコードに配置する必要がある

parent::__construct()
<?php
class Blog extends CI_Controller {
	public function __construct(){
		parent::__construct(){
		// これ以降にコードを書いていく
		}
	}
}

MVC Model-View-Controller