アプリの処理が済んだらレスポンスデータを送信するResponseクラス

MVCフレームワーク

アプリの処理が済んだらレスポンスデータを送信するResponseクラスを定義します。

Responseクラスの作成

まず、レスポンスヘッダーに関連する情報をプロパティに格納するメソッドを定義し、それからレスポンスヘッダーとレスポンスボディを生成するメソッドを定義します。

ステータスラインとコンテンツをプロパティに格納するメソッド

アプリ側では引数を指定して、それぞれのメソッドを呼び出すことで各プロパティに値を格納していきます。

class Response {
    //コンテンツを保持するプロパティ
    protected $_content;
    //ステータスメッセージを保持するプロパティ
    protected $_statusCode = 200;
    //ステータスコードのテキストを保持
    protected $_statusMsg = 'OK';
    //レスポンスヘッダーのフィールドを保持
    protected $_headers = array();
    const HTTP = 'HTTP/1.1';
    //ステータスコードとメッセージをプロパティに格納する
    public function setStatusCode($code, $msgtxt = ''){
        $this->_statusCode = $code;
        $this->_statusMsg = $msg;
    }

    //ヘッダーフィールドをプロパティに格納
    public function setHeader($name, $value){
        $this->headers[$name] = $value;
    }

    //コンテンツをプロパティに格納
    public function setContent($content){
        $this->content = $content;
    }
}

レスポンスヘッダーとレスポンスボディを生成

次に以下の通りの処理を行うようsend()メソッドを定義します。

  • ステータスラインとヘッダーフィールドをレスポンスヘッダーの情報として送信する
  • コンテンツ(HTML要素)を出力し、これをレスポンスボディとして送信
public fucntion send(){
    header(self::HTTP . $this->_statusCode . $this->_statusMsg);

    //$http_headersプロパティの値を$name:$valueで送信
    foreach($this->_headers as $name => $value){
        header($name . ';' . $value);
    }

    //コンテンツ(HTML要素)を出力する
    print $this->content;
}

レスポンスクラスのコードまとめ

Response.phpのコードは以下のようになります。

<?php
class Response {
    //コンテンツを保持するプロパティ
    protected $_content;
    //ステータスメッセージを保持するプロパティ
    protected $_statusCode = 200;
    //ステータスコードのテキストを保持
    protected $_statusMsg = 'OK';
    //レスポンスヘッダーのフィールドを保持
    protected $_headers = array();
    const HTTP = 'HTTP/1.1';
    //ステータスコードとメッセージをプロパティに格納する
    public function setStatusCode($code, $msgtxt = ''){
        $this->_statusCode = $code;
        $this->_statusMsg = $msg;
    }

    //ヘッダーフィールドをプロパティに格納
    public function setHeader($name, $value){
        $this->headers[$name] = $value;
    }

    //コンテンツをプロパティに格納
    public function setContent($content){
        $this->content = $content;
    }

    public fucntion send(){
        header(self::HTTP . $this->_statusCode . $this->_statusMsg);

        //$http_headersプロパティの値を$name:$valueで送信
        foreach($this->_headers as $name => $value){
            header($name . ';' . $value);
        }

        //コンテンツ(HTML要素)を出力する
        print $this->content;
    }
}
?>

コメント

タイトルとURLをコピーしました