コントローラーの作成
- 1. コントローラーの作成
- 2. ルーティングの設定
1. コントローラーの作成
次はMVCのCに該当するコントローラーを作成し、ビューファイルを読み込む処理を実装しましょう。
手順1
(1) | 「application」フォルダー内に「controllers」フォルダーを作成してください。 |
(2) | 作成した「controllers」フォルダー内に「LoginController.php」ファイルを作成してください。 |
(3) | 作成した「LoginController.php」を以下のコードで置き換えてください。 |
<?php
class LoginController
{
public function getAction()
{
require_once './application/views/login.php';
}
}
これで、「LoginController」クラスの「getAction」メソッドを呼び出すことで、ログイン画面を表示できるようになりました。
解説
require_once
『PHP Web初級』コースでファイルを読み込むのに使用した「include」関数と同じく、別のファイルを読み込むための関数です。「include」関数との違いは、同じファイルを二度読み込もうとした場合二度目は読み込まず、なおかつファイルの読み込みに失敗した場合、即座に処理を停止します。
2. ルーティングの設定
次は作成したコントローラーを呼び出す処理を追加しましょう。
手順2
(1) | 「index.php」ファイルを、下記のコードで置き換えてください。 |
<?php
require_once './application/controllers/LoginController.php';
$pathName = explode('/', $_SERVER['REQUEST_URI'])[2]; // 「login」や「home」などのパスを取得
if ($pathName === 'login') {
$loginController = new LoginController();
$loginController->getAction();
}
これで、「/login」への「GET」通信で「ログイン画面」を表示することができました。ブラウザのアドレスバーに「http://localhost/tweet_php/login」と入力して確認してみましょう。
解説
処理の流れ
require_once './application/controllers/LoginController.php';
作成したコントローラークラスのファイルを読み込んでいます。
$pathName = explode('/', $_SERVER['REQUEST_URI'])[2];
PHPに元から用意されているスーパーグローバル変数の「$_SERVER[]」を使用することで様々な値を取得することができます。今回は「REQUEST_URI」と指定することで「/tweet_php/login」という現在アクセスされたURL(ドメイン以下)を取得しています。
そのURLを「explode」という関数を使用して「/」区切りで分割された「''(空文字)、tweet_php、login」という値の配列に変換します。そして「[2]」で、配列の3番目の値である「login」を取得して、変数「pathName」に代入しています。
この一行で、「http://localhost/tweet_php/home」へのアクセスで「home」、「http://localhost/tweet_php/mypage」へのアクセスで「mypage」という文字列が取得できるようになりました。
if ($pathName === 'login') {
変数「pathName」の値が「login」の場合(「http://localhost/tweet_php/login」へのアクセスの場合)以下の処理が実行されます。
$loginController = new LoginController();
「LoginController」クラスをインスタンス化します。
$loginController->getAction();
「getAction」メソッドを呼び出します。
このような、ユーザーからのリクエストと、サーバー側でおこなわれる処理を紐づけることをルーティングといいます。リクエストされたURLごとに別のコントローラーを呼び出すようにすること、異なる画面を表示したり、異なる処理をおこなうWebアプリケーションを作成することができます。