静的なページ¶
注意: このチュートリアルでは、あなたが既に CodeIgniter をダウンロードし、開発環境に フレームワークをインストール している ことを前提としています。
まず最初に静的なページを処理する コントローラ をセットアップします。 コントローラはシンプルな指名するお仕事を支援するクラスです。 これが Web アプリケーションのつなぎになります。
たとえば、以下がコールされたとき:
我々は “news” という名前のコントローラがあるのだと推測します。 呼ばれるメソッドは “latest” となります。その news のメソッドの仕事は、 10 件のニュース記事を取ってきてページ上に描画することかもしれません。 MVC では非常に頻繁にこのような URL のパターンが見られます:
http://example.com/[コントローラクラス]/[コントローラメソッド]/[引数]
URL スキームが複雑化するにつれてこのパターンは変化するかもしれません。 しかし、一旦はこれを知っていれば十分です。
application/controllers/Pages.php に、下記のコードを記述したファイルを作成 してください。
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
あなたは Pages という名のクラスを作り、そこに 1 つの $page という引数を とる view メソッドを作成しました。Pages クラスは CI_Controller クラスを継承しています。これは、新しく作られたこの Page クラスは CI_Controller クラス(system/core/Controller.php) に定義されたメソッドや変数をアクセスできるということです。
コントローラはあなたのアプリケーションの全てのリクエストの中心となる部分 です。 CodeIgniter の非常に専門的な議論において、これは スーパーオブジェクト と呼ばれる事があります。一般的なPHPクラスと同じように、コントローラ内では $this という変数でこれを参照します。$this を参照する事によって ライブラリやビューをロードしたり、フレームワークの基本的な制御を行ないます。
最初のメソッドを作成したら、次は基本的なページテンプレートを作っていきましょう。 まずは 2 つの “ビュー”(ページテンプレート)を作り、 それらをページのフッタとヘッダとします。
application/views/templates/header.php にヘッダーを作成し、 下記のコードを記述してください。:
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
ヘッダにはメインのビューをロードする前に表示させたい単純な HTML コードが 見出しと共に含まれています。ここで後々コントローラにて定義する $title 変数を出力させる事にもなります。では次は application/views/templates/footer.php にフッタを作成し、 下記のコードを記述してください:
<em>© 2015</em>
</body>
</html>
コントローラにロジックを追加¶
先ほどあなたは view() メソッドを持ったコントローラを準備しました。 このメソッドは、ロードするページの名前になる引数を 1 つ取ります。 静的なページテンプレートは application/views/pages/ に配置されます。
そのディレクトリ内に home.php と about.php という 2 つのファイルを作ってください。 それらのファイルの中に、何かしらの文言(あなたがご自由に決めてください を入力し保存します。もし特に思い浮かばなければ、”Hello World!” と入れてみてください。
これらのページをロードするためには、まずそのページが存在するかどうかを チェックしなければなりません:
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
{
// おっと、そのページはありません!
show_404();
}
$data['title'] = ucfirst($page); // 頭文字を大文字に
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
ページが存在する場合、それはヘッダとフッタと共にロードされユーザに 表示されます。 もしページが存在しなければ、”404 Page not found” エラーが表示されます。
このメソッドの 1 行目では、まずページが存在するかどうかをチェックしています。 PHP のネイティブな file_exists() 関数がファイルの存在有無を判別するために 使用されています。show_404() は CodeIgniter のビルトイン関数で、 デフォルトのエラーページを描画してくれます。
ヘッダテンプレートの中で、$title 変数はページのタイトルをカスタマイズする ために使われました。 タイトルはこのメソッド内で定義されていますが、値を変数に代入するのではなく、 $data 配列の title 要素に代入されます。
最後にしなければいけないのは、ビューを表示順にロードしてくことです。 view() メソッドの第 2 引数はビューに値を引き渡すために使われます。 $data 配列のそれぞれの値は、キーを変数名とした変数に 代入されます。 つまり、コントローラ内の $data['title'] は、 ビュー内の $title と同等です。
ルーティング¶
これであなたのコントローラは稼働しています! ブラウザ上で [your-site-url]index.php/pages/view にアクセスしてみてください。 index.php/pages/view/about にアクセスすれば、ヘッダとフッタを含んだ about ページが見えるはずです。
独自のルーティング規則を使い、あなたはどんな URI でも好きなコントローラの好きな メソッドにマッピングする事ができ、下記の通常の規約から自由になることができます: http://example.com/[コントローラクラス]/[コントローラメソッド]/[引数]
実際にやってみましょう。application/config/routes.php に配置されている ルーティングファイルを開き、次の 2 行を追記してください。 そして $route 配列に要素を追加している他のすべてのコードを削除してください。
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
CodeIgniter はルーティング規則を上から下に解析していき、マッチした最初の規則に リクエストをルーティングします。それぞれの規則は正規表現(左辺)がスラッシュ 区切りのコントローラとメソッド(右辺)にマッピングされた形で記述されています。 リクエストが入ってくると CodeIgniter は一番最初のマッチを探し、適切な コントローラとメソッドを必要に応じて引数付きで 呼び出します。
ルーティングについては URI ルーティングの ドキュメント を参照して下さい。
この例では、$route 配列の 2 番目の規則は どんな リクエストでも ワイルドカード文字列 (:any) を使ってマッチします。そして、それを Pages クラスの view() メソッドに引数として渡します。
では、 index.php/about にアクセスしてみてください。 正しく Pages コントローラの view() メソッドにルーティングされましたか? 素晴らしい!