コントローラーの作成

目次
  • 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アプリケーションを作成することができます。