静的ページ

注: このチュートリアルは、CodeIgniterをダウンロードし、開発環境に フレームワークがインストール済み iであることを 前提としています。

まずは静的ページを処理するように controller を設定します。controller は単に役割を委任するだけのクラスです。 これはあなたのWebアプリケーションの接着剤の役割を果たします。

例えば次の呼び出しが行われたとします:

http://example.com/news/latest/10

“news” という名前のコントローラーがあると想像してください。latestというメソッドが 呼び出されます。ニュースメソッドの仕事は10個のアイテムを取得して ページに表示をすることです。MVCでは多くの場合 一致するURLパターンで表示されます:

http://example.com/[controller-class]/[controller-method]/[arguments]

URLスキームがより複雑になると、これは変更される可能性があります。しかし、今のところ 私たちがするべきものの全てです。

はじめてのコントローラーを作ろう

app/Controllers/Pages.php

にファイルを作成し、次のコードを書いてみましょう。

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Pages extends Controller
{
    public function index()
    {
        return view('welcome_message');
    }

    public function view($page = 'home')
    {
    }
}

view() メソッドに 引数 $page を受け入れたものを作成し、 Pages という名前のクラスを作成しました。app/Controllers/Home.php にあるデェフォルトのコントローラーと同じ index() メソッドもあります。 このメソッドは、CodeIgniterのウェルカムページを表示します。

Pages クラスは CodeIgniter\Controller クラスを継承しています。 これは、新しい CodeIgniter\Controller クラス (system/Controller.php) で定義されたメソッドと変数にアクセスできることを意味します。

controller はWebアプリケーションへの全てのリクエストの中心 となります。他のphpで書かれるClassと同様にコントローラー 内では $this として参照されます。

最初のメソッドを作成したので、 いくつかの基本的なページテンプレートを作成します。ページフッターとヘッダーとして機能する2つの “ビュー” (ページテンプレート) を 作成します。

app/Views/templates/header.php を作成し 次のコードを書いて見ましょう :

<!doctype html>
<html>
<head>
    <title>CodeIgniter Tutorial</title>
</head>
<body>

    <h1><?= esc($title); ?></h1>

ヘッダーはメインビューを読み込む前に表示する 基本的なHTMLコードと見出しが含まれています。またコントローラで後で定義する $title 変数も出力をします。 次に app/Views/templates/footer.php を作成し、 次のコードを書いて見ましょう。:

    <em>&copy; 2019</em>
</body>
</html>

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

ここまでに``view()`` メソッドを作成しました。このメソッドは ロードされるページの名前であるパラメータを受け入れています。静的な ページ本体は app/Views/pages/ ディレクトリにあります。

そのディレクトリに home.phpabout.php を作成します。 それらのファイル内でテキスト(必要なものはなんでも)を入力し、保存します。 特に独創的に書くのでなければ、”Hello World!” で良いでしょう。

これらのページをロードするには、 リクエストされたページが存在するかどうかを確認する必要があります。これは上で作成した、 Pages クラスの view() メソッドの本体になります :

public function view($page = 'home')
{
    if ( ! is_file(APPPATH.'/Views/pages/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
        throw new \CodeIgniter\Exceptions\PageNotFoundException($page);
    }

    $data['title'] = ucfirst($page); // Capitalize the first letter

    echo view('templates/header', $data);
    echo view('pages/'.$page, $data);
    echo view('templates/footer', $data);
}

これで、要求されたページが存在する場合、ヘッダーとフッターを含めてロードされ、 ユーザーに表示されます。リクエストされたページが存在しない場合には、 “404 Page not found” エラーが表示されます。

このメソッドの最初の行では、ページが実際に存在するかどうかの確認をします。 PHPのネイティブ関数 is_file() 関数を利用して ファイルが予定されていた場所にあるかどうかを確認しています。PageNotFoundException は CodeIgniter で用意されている例外で、エラーページを表示させるために用意されています。

Iヘッダーテンプレートでは $title 変数を利用してページタイトルを カスタマイズしました。このタイトル値はこのメソッドで定義されますが、 値を変数に割り当てる代わりに、$data に 配列でタイトル要素を割り当てることができます。

最後に、表示をする順序で ビューをロードする必要があります。これを行うには、 CodeIgniter に組み込まれている、view() 関数を使用します。 view() 関数の2番目の引数は、 ビューに値を渡すものです。$data 変数の値である配列の各値は そのキーの名前を持つ変数に割り当てられます。したがって、コントローラの $data['title'] の値はビューの $title と同等です。

アプリの実行

テストをする準備はできましたか?組み込みサーバを利用する場合、public で提供される .htaccess の設定を適用できないため、 URLの一部を “index.php/” のように アプリを実行することができませんCodeIgniterには使用できる独自のコマンドがあります。

コマンドラインから、プロジェクトのルートで実行できます:

php spark serve

これは、 port 8080 でアクセス可能なWebサーバを提供します。ブラウザで localhost:8080 にアクセスすると、 CodeIgniterのウェルカムページが表示されます。

ブラウザ上でいくつかURLを試して、上記で作成した Pages コントローラーが何を表示するか確認してみましょう。

ルーティング

コントローラーが機能しています!

カスタムルーティングルールを使用すると、任意のURIを任意のコントローラーおよびメソッドに割り当てをし、 通常の規則から解放されます:

http://example.com/[controller-class]/[controller-method]/[arguments]

まずは最初にそれを修正しましょう。まず、 app/Config/Routes.php にあるファイルを開き、 「ルート定義」セクションを、 ファイルの中で探します。

最初にコメント化されていない行は次の通りです:

$routes->get('/', 'Home::index');

このディレクティブは、コンテンツが指定されていない着信は Home コントローラの index() メソッドによって処理されることを示しています。

‘/’ のルートディレクティブの に次の行を追加します。
$routes->get('(:any)', 'Pages::view/$1');

CodeIgniterはルーティングルールを上から下に順に読み取り、 リクエストを最初に一致したルールに割り当てます。各ルールは / で区切られたコントローラー(左側) と メソッド名 (右側)にマッピングされた 正規表現です。リクエストが届くと、CodeIgniterは最初の一致を探して、 適切なコントローラーとメソッドを、おそらくですが引数を指定して 呼び出します。

ルーティングの詳細については、 ドキュメント を参照してください。

$routes 配列の2番目のルールは ワイルドカード文字列 (:any) を利用した any リクエストと一致します。パラメータを Pages クラスの view() メソッドに渡します。

次に localhost:8080/home へアクセスしてください。Pagesコントローラーの view() メソッドに 正しくルーティングされましたか? やったね!

次のような内容が表示されます。:

../_images/tutorial1.png