zakkiのブログ

IT関連などの雑記のブログです

フレームワークを簡潔にまとめました ビュウ処理

フレームワークでのビュウ処理を簡潔にまとめました。

フレームワーク学習の手助けなどになれば幸いです。


実行方法

任意の場所にコードを配置して実行してください。


コード

このような階層に配置してください。

index.php
view.php
helper.php
templates/
    index/
        index.html
        part.html
    common/
        layout.html
        part2.html


index.php

ビュウ管理を呼び出して実行。

<?php

require_once __DIR__ . '/view.php';
require_once __DIR__ . '/helper.php';

class test {
    /**
    * メインルーチン
    */
    public function run() {
        //サービスコンテナ作成
        $app = new \stdClass;
        
        //ビュウ管理クラス生成
        $view = new framework\view();
        $view->template_path = __DIR__ . '/templates';
        
        //サービスコンテナにヘルパー追加
        $app->helper = new helper();
        
        //サービスコンテナをビュウ管理クラスに設定
        $view->app = $app;
        
        //共通変数設定
        $view->data['val1'] = '11111';
        
        //ページデータ
        $html = $view->get('index/index.html');
        
        //レイアウト
        $view->data['CONTENTS'] = $html;
        $html = $view->get('common/layout.html');
        
        //トレース
        $this->trace($html);
    }
    
    /**
    * トレース
    */
    private function trace($html) {
        //トレース
        echo "<hr>";
        echo $html;
        echo "<hr>";
        echo "<pre>";
        echo htmlspecialchars($html);
        echo "</pre>";
        echo "<hr>";
    }
}

(new test)->run();


view.php

フレームワークのビュウ処理クラス

<?php

namespace framework;

/**
 * ビュウ管理
 */
class view {
    //サービスコンテナ
    public $app;
    
    //データ
    public $data = [];
    
    //テンプレートのあるパス
    public $template_path;
    
    /**
    * データ取得
    */
    public function get(string $sub_path, array $data = []) {
        ob_start();
        include($this->template_path . '/' . $sub_path);
        $text = ob_get_contents();
        ob_end_clean();
        
        return $text;
    }
}


helper.php

ヘルパークラス

<?php

/**
 * ヘルパー管理
 */
class helper {
    function method1($val) {
        return 'Method1: ' . $val;
    }
}


templates/index/index.html

ページ単位のテンプレート

<?php
//ヘルパーを使いやすいようにする
$helper = $this->app->helper
?> 
<index>

ヘルパー

<?php echo $helper->method1('test1') ?> 

共通変数

<?php echo $this->data['val1'] ?> 

インクルード

<?php echo $this->get('index/part.html', ['local1' => 'xxxxx', ]) ?> 

</index>


templates/common/layout.html

レイアウトのテンプレート

<?php
//ヘルパーを使いやすいようにする
$helper = $this->app->helper
?> 
<layout>

<contents>

<?php echo $this->data['CONTENTS'] ?> 

</contents>

ヘルパー

<?php echo $helper->method1('test2') ?> 

共通変数

<?php echo $this->data['val1'] ?> 

インクルード

<?php echo $this->get('common/part2.html', ['local2' => 'yyyyy', ]) ?> 

</layout>


templates/index/part.html

インクルードされるテンプレート

<?php
//ヘルパーを使いやすいようにする
$helper = $this->app->helper
?> 
<part>

ローカル変数

<?php echo $data['local1'] ?> 

ヘルパー

<?php echo $helper->method1('test3') ?> 

共通変数

<?php echo $this->data['val1'] ?> 

インクルード

<?php echo $this->get('common/part2.html', ['local2' => 'zzzzz', ]) ?> 

</part>


templates/common/part2.html

インクルードされるテンプレート2

<part2>

ローカル変数

<?php echo $data['local2'] ?> 

</part2>



気づけばプロ並みPHP 改訂版ーーゼロから作れる人になる! [ 谷藤賢一 ]