静的ページ
注記
このチュートリアルでは、CodeIgniterをダウンロードし、フレームワークをインストール済みであることを前提としています。
最初にやることは、静的ページを処理するためのルーティングルールを設定することです。
ルーティングルールの設定
ルーティングは、URIをコントローラーのメソッドに関連付けます。コントローラーは、単に作業を委任するのに役立つクラスです。コントローラーは後で作成します。
ルーティングルールを設定しましょう。**app/Config/Routes.php**にあるroutesファイルを開きます。
最初は、そこに存在するルートディレクティブは
<?php
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Home::index');
このディレクティブは、コンテンツが指定されていないすべての着信リクエストが、Home
コントローラー内のindex()
メソッドによって処理されることを意味します。
'/'
のルートディレクティブの**後**に、次の行を追加します。
use App\Controllers\Pages;
$routes->get('pages', [Pages::class, 'index']);
$routes->get('(:segment)', [Pages::class, 'view']);
CodeIgniterは、ルーティングルールを上から下へ読み取り、リクエストを最初に一致するルールにルーティングします。各ルールは、コントローラーとメソッド名(右側)にマッピングされた正規表現(左側)です。リクエストが来ると、CodeIgniterは最初の一致を探し、適切なコントローラーとメソッドを呼び出します(引数がある場合もあります)。
ルーティングに関する詳細情報は、URIルーティングにあります。
ここで、$routes
オブジェクトの2番目のルールは、URIパス** /pages**へのGETリクエストに一致し、Pages
クラスのindex()
メソッドにマッピングされます。
$routes
オブジェクトの3番目のルールは、プレースホルダー(:segment)
を使用してURIセグメントへのGETリクエストに一致し、パラメーターをPages
クラスのview()
メソッドに渡します。
最初のコントローラーを作成しましょう
次にやることは、静的ページを処理する**コントローラー**を設定することです。コントローラーは、単に作業を委任するのに役立つクラスです。これは、Webアプリケーションの接着剤です。
Pagesコントローラーの作成
次のコードを使用して、**app/Controllers/Pages.php**にファイルを作成します。
重要
ファイル名の場合は、常に注意する必要があります。多くの開発者は、WindowsまたはmacOSのケースを区別しないファイルシステムで開発します。しかし、ほとんどのサーバー環境は、ケースを区別するファイルシステムを使用しています。ファイル名のケースが間違っていると、ローカルで動作するコードはサーバーでは動作しません。
<?php
namespace App\Controllers;
class Pages extends BaseController
{
public function index()
{
return view('welcome_message');
}
public function view($page = 'home')
{
// ...
}
}
view()
メソッドを持つPages
という名前のクラスを作成しました。これは$page
という名前の1つの引数を受け取ります。index()
メソッドも持っています。これは、**app/Controllers/Home.php**にあるデフォルトのコントローラーと同じです。そのメソッドは、CodeIgniterのウェルカムページを表示します。
注記
このチュートリアルでは、2つのview()
関数が参照されています。1つはpublic function view($page = 'home')
とreturn view('welcome_message')
を使用して作成されたクラスメソッドであり、ビューを表示します。どちらも技術的には関数です。しかし、クラスに関数を作成すると、それはメソッドと呼ばれます。
Pages
クラスは、CodeIgniter\Controller
クラスを拡張するBaseController
クラスを拡張しています。これは、新しいPagesクラスがCodeIgniter\Controller
クラス(**system/Controller.php**)で定義されたメソッドとプロパティにアクセスできることを意味します。
**コントローラーは、Webアプリケーションへのすべてのリクエストの中心となるもの**です。PHPクラスと同様に、コントローラー内では$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>© 2022</em>
</body>
</html>
注記
**header.php**テンプレートをよく見ると、esc()
関数を使用しています。これは、XSS攻撃を防ぐためにCodeIgniterによって提供されるグローバル関数です。詳細については、グローバル関数と定数を参照してください。
コントローラーへのロジックの追加
home.phpとabout.phpの作成
先に、view()
メソッドを持つコントローラーを設定しました。このメソッドは、読み込むページの名前である1つのパラメーターを受け取ります。
静的ページの本文は、**app/Views/pages**ディレクトリに配置されます。
そのディレクトリに、home.php と about.php という名前の2つのファイルを作成します。これらのファイル内に、任意のテキストを入力して保存します。「Hello World!」でも構いません。
完全なPages::view()メソッド
これらのページを読み込むには、要求されたページが実際に存在するかどうかを確認する必要があります。これは、上記で作成したPages
コントローラーのview()
メソッドの本体になります。
<?php
namespace App\Controllers;
use CodeIgniter\Exceptions\PageNotFoundException; // Add this line
class Pages extends BaseController
{
// ...
public function view($page = 'home')
{
if (! is_file(APPPATH . 'Views/pages/' . $page . '.php')) {
// Whoops, we don't have a page for that!
throw new PageNotFoundException($page);
}
$data['title'] = ucfirst($page); // Capitalize the first letter
return view('templates/header', $data)
. view('pages/' . $page)
. view('templates/footer');
}
}
そして、namespace
行の後にuse CodeIgniter\Exceptions\PageNotFoundException;
を追加して、PageNotFoundException
クラスをインポートします。
これで、要求されたページが存在する場合、ヘッダーとフッターを含めて読み込まれ、ユーザーに返されます。コントローラーが文字列を返す場合、それはユーザーに表示されます。
注記
コントローラーは、文字列またはResponseオブジェクトを返す必要があります。
要求されたページが存在しない場合、「404 ページが見つかりません」エラーが表示されます。
このメソッドの最初の行では、ページが実際に存在するかどうかを確認します。PHPのネイティブ関数is_file()
を使用して、ファイルが期待される場所にあるかどうかを確認します。PageNotFoundException
は、デフォルトのエラーページを表示させるCodeIgniterの例外です。
ヘッダーテンプレートでは、$title
変数を使用してページタイトルをカスタマイズしました。タイトルの値はこのメソッドで定義されていますが、変数に値を代入する代わりに、$data
配列のtitle要素に代入されます。
最後に、表示する順序でビューを読み込む必要があります。これには、CodeIgniterに組み込まれているview()
関数を使用します。view()
関数の第2パラメーターは、ビューに値を渡すために使用されます。$data
配列の各値は、キーの名前を持つ変数に割り当てられます。そのため、コントローラー内の$data['title']
の値は、ビュー内の$title
と等価です。
アプリの実行
テストの準備はできましたか?PHPの組み込みサーバーを使用してアプリを実行することはできません。これは、publicに提供されている.htaccessルールを正しく処理せず、URLの一部として「index.php/」を指定する必要がなくなるためです。しかし、CodeIgniterには独自の命令があります。
コマンドラインから、プロジェクトのルートで
php spark serve
と入力すると、ポート8080でアクセスできるWebサーバーが起動します。ブラウザの場所フィールドにlocalhost:8080を設定すると、CodeIgniterのウェルカムページが表示されます。
次に、localhost:8080/homeにアクセスします。Pages
コントローラーのview()
メソッドに正しくルーティングされましたか?素晴らしい!
次のようなものが表示されます。

これで、ブラウザの場所フィールドにいくつかのURLを試して、上記で作成したPages
コントローラーが生成するものを確認できます…
URL |
表示内容 |
---|---|
localhost:8080/ |
CodeIgniterの「ウェルカム」ページ。 |
localhost:8080/pages |
作成した |
localhost:8080/home |
上記で作成した「home」ページが表示されます。これは、明示的に要求したためです。 |
localhost:8080/about |
上記で作成した「about」ページが表示されます。これは、明示的に要求したためです。 |
localhost:8080/shop |
app/Views/pages/shop.phpが存在しないため、「404 - ファイルが見つかりません」エラーページが表示されます。 |