静的なページ

注意: このチュートリアルでは、あなたが既に 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>&copy; 2015</em>
        </body>
</html>

コントローラにロジックを追加

先ほどあなたは view() メソッドを持ったコントローラを準備しました。 このメソッドは、ロードするページの名前になる引数を 1 つ取ります。 静的なページテンプレートは application/views/pages/ に配置されます。

そのディレクトリ内に home.phpabout.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() メソッドにルーティングされましたか? 素晴らしい!