phpフレームワーク自作1

八ヶ岳阿弥陀岳

いまさらながら、phpのフレームワークを作ろうとは、と思う人がおられるでしょうが。実務においては、laravelとかslimとかを使って開発していくのが当たり前になってきているらしい。

中規模以上の案件では、プロジェクトに複数の人が係わることになり、当然、共通の枠組みの中で作業を進めていくのであるから当然の事と思います。

ここであえて、自作でやろうと思うのは、model,view,controlというmvcの開発手法のエッセンスたるものを自分自身の中で噛み砕いて理解してみようと考えてからでした。

レガシーなもので今までやってきていたので、定番とは外れた表現があるかと思いますが、その点を指摘いただければ幸いと思っております。

まずは初回目として、ディレクトリ構成と処理の大まかな流れについて説明していきたいと思います。
 尚、掲載内容については、php7を想定して書いているので、読者はこれらを習得しているものとして話を進めていますので、ご承知してもらいたい。

ディレクトリ構成~(ns)はnamespaceが設定されているものを示します。

 SYSROOT/  フォルダー名はconfig.phpで定義
    composer.json
    framework/
      common/
        ClassLoader.php (ns)
        DbCommon.php (ns)
        ErrorFunc.php (ns)
        NotExistMemberTrait.php (ns)
        Secirity.php (ns)
      mvc/
        BadRequestException.php (ns)
        ControllerBase.php (ns)
        Db.php (ns)
        Dispatcher.php (ns)
        Post.php (ns) extends RequestVariable
        QueryString.php (ns) extends RequestVariable
        Request.php (ns)
        RequestVariables.php (ns)
      tmp/
        実装すべきアプリケーションファイルのひながた
      bootstrap.php
      globalsetting.php 
      util.php (ns)  
      error.txt 
    APPNAME/ アプリケーション固有のファイルを格納 
      request/ controllerの数だけRequest継承クラス生成
        IndexRequest.php (ns) extends Request
      controllers/ controllerの数だけ定義する。
        IndexController.php (ns)
      models/
        データベースのtableと対応したdbを操作するクラス、または共通機能クラス
      views/ テンプレートエンジンを操作表示する
        templates/
        templates_c/
        MySmarty.php (ns) extends Smarty 
          
      dbinit.php 
      config.php
    vendor/
      composer/
      smarty/
      phpunit/ 
      autoload.php
    data/
      アプリケーションで使用するデータファイル、sqliteファイル
    htdocs/ ドキュメントルート
      img/
      APPNAME/
        css/
        js/
        .htaccess 
        index.php 

APPNAMEは製作するアプリケーションの名前をconfigファイルの中で定数設定します。

フォルダー階層については、index.phpファイルのあるフォルダー階層はconfigファイルの定数で設定できますが、それ以外については処理ベースである、frameworkフォルダー内のファイルをいじらなければならないでしょう。

レンダリングにはテンプレートエンジンである、smartyを使っていますが、それ以外のものならば、viewフォルダーをいじる必要があります。

データベースをsqliteにするにはdataフォルダーが必要になりますが、データベースサーバとして処理を行うmysqlなどでは必要ありません。

大まかな処理の流れ

  SYSROOT/
    composer.json
    framework/
      lib/
      mvc/                処理ベース
      tmp/                   
      bootstrap.php          
      globalsetting.php   
      util.php           
      error.txt           
                         
    APPNAME/               
     request/              
      controllers/       
      models/             アプリケーション処理本体
      views/             
      dbinit.php        
      config.php       
                       
    vendor/            
      smarty/             外部ライブラリー
      phpunit/
      autoloader.php                    
    data/               
                          データ    
    htdoc/     
      img/                                   
      APPNAME/      web公開領域
        css/                                  
        js/                                                     
        .htaccess                                               
        index.php

フレームワーク概要

  • ①ホームページ上のアドレス(index.php)にアクセスするとアプリケーションの処理が始まります。
  • ②コントローラーの処理手順に従ってフレームワークのコアである処理ベースのクラスを継承、または利用します。
  • ③独自の処理やデータを利用します。
  • ④最終的にはデータを書き換えたり、ホームページ上の画面に出力したり、その他デバイスに出力することになります。

処理の流れはコントローラーに集約されるため、機能の追加や更新はコントローラーをみて、処理を組み立てることになります。

また、データの取り扱いはmodelsディレクトリのクラスの中に集約されており、必要に応じてコントローラから呼び出されることになります。

最終的には、何かに出力されるのですが、web画面としては、テンプレートエンジンであるsmartyの機能を使って出力されることになります。

—————————————————————————————
次回は、実際に「更新情報管理システム」を作りながら、フレームワークについて説明してみることにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です