独自の PHP MVC フレームワークを開発する (1)

WBOY
リリース: 2016-06-13 12:29:03
オリジナル
679 人が閲覧しました

独自の PHP MVC フレームワークを開発する (1)

このチュートリアルでは、誰もが MVC モードを使用した PHP アプリケーション開発の基本概念を習得できます。このチュートリアルは 3 つの部分に分かれており、これは最初の部分です。

現在、誰もが使用できる人気のフレームワークが数多く市販されていますが、mvc モデルを使用すると、アプリケーションの開発時間を大幅に短縮し、プロジェクトのソース コードをより適切に整理することもできます。一部のモジュールは他のプロジェクトでも使用できます。ここで、簡単な MVC フレームワークを作成する方法を教えたいと思います。このプロジェクトは非常にシンプルで軽量であるため、ベストプラクティスではない可能性があり、安全でもありません。実際のアプリケーションでは改善する必要があります。

使用テクノロジー: php、オブジェクト指向開発手法。

開始

まず、Web サイトのルート ディレクトリに 3 つのフォルダーを作成します

  • models
  • views
  • controllers

次に、ルート ディレクトリに新しいファイルを作成します:

  • Index .php

プロジェクト構造は次のようになります

§ Web サイトのルート ディレクトリ

§index .php

§ models/

§ views/

§controllers/


index.php は、Web アプリケーション全体のエントリ ポイントです、すべてのユーザーリクエストはすべてそれを通過します。ユーザーリクエストをコントローラーフォルダーに保存されている対応するコントローラーにディスパッチするためのコードを作成します。その後、次のメソッドを使用してページジャンプを実現できます:

  • http://ドメイン名.com/index.php?page1
  • http://ドメイン名.com/index.php?page2
  • http: //あなたのドメイン名.com/index.php?page3

フロントエンドコントローラーを設定します。index.php

まず、Web サイトのルート ディレクトリと Web サイトのドメイン名を Index に定義します。 php を使用して、アプリ全体からアクセスできるようにします。

[php] プレーンに表示 コピー
  1. //適用ルートディレクトリはindex.phpの親ディレクトリです
  2. define("SERVER_ROOT", dirname(<🎜) > __FILE__));
  3. これはサーバーのドメイン名です
  4. define('SITE_ROOT' ,
  5. 'http:///あなたのドメイン名.com'); 🎜>Web サイトのルート ディレクトリを定義した後、任意の php ファイルで、index.php がエントリ ファイルに保存されるため、アプリケーション全体でそのファイルに定義されている変数にアクセスできます。

    ルーターの router.php を設定します (ユーザー リクエストを対応するコントローラーに転送します)

    コントローラー ディレクトリに「router.php」という名前の新しいファイルを作成します。このファイルは、すべてのページ リクエストを処理するために使用されます。家のルーターが、家のすべてのコンピューターにインターネットをルーティングする役割を果たしていると想像してください。 router.php ファイルは、受信ページリクエストをindex.phpに受け取り、そのリクエストを別のコントローラにディスパッチします。

    route.php のコード:

    [php] view plain copy

    1. // すべてのリクエストを取得します
    2. $request = $_SERVER['QUERY_STRING'];


    このコードは、アプリケーションに渡されるリクエスト パラメーターを取得します。 QUERY_STRING は、「?」以降のすべての文字列です。

    • http://yourdomain.com/index.php?page1
    上記のアドレスは、コード内で「page1&action=login」を順番に取得します。 page1 を次のパラメータから分離するには、次のコードを Route.php に追加する必要があります:

    [php] view plain copy

    1. //$request 変数を解析して、ユーザーによって要求されたページ (page1) と、リクエスト http://yourdomain.com などの他の GET 変数 (および分離された変数) を取得します。 /index.php?page1&article=buildawebsite、array("page1", "article=buildawebsite")
    2. $parsed として解析されます = explode('&' , $request);
    3. //上記の page1 など、ユーザーによって要求されたページは $parsed です最初の変数、シフト後の配列は array("article=buildawebsite")
    4. $page = array_shift($parsed);
    5. //残りは GET 変数です。解析します
    6. $getVars = 配列();
    7. foreach ( <🎜) >$parsed as $argument)
    8. {
    9. //文字列を「=」で区切ります。左側に変数、右側に値を配置します
    10. list($variable , $value) = split('=' , $argument);  
    11. $getVars[$variable] = $値;  
    12. }
    13. //これはテストステートメントです。すぐに削除されます
    14. print "要求されたページは '$page'です";
    15. ; 🎜>'
      '; getVars
    16. "以下GET 変数がページに渡されました:
      "<li class="alt" style="border-style:none none none solid; border-left-width:3px; border-left-color:rgb(108,226,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important">
      <span style="margin:0px; padding:0px; border:none; color:black; background-color:inherit">.<span class="vars" style="margin:0px; padding:0px; border:none; color:rgb(221,0,0); background-color:inherit"></span>$vars<span style="margin:0px; padding:0px; border:none; background-color:inherit"></span>.<span class="vars" style="margin:0px; padding:0px; border:none; color:rgb(221,0,0); background-color:inherit"></span>"
      ";
    17. 次に、index.php にroute.php を導入する必要があります
      [php] view plain copy

      1. /**
      2. * ドキュメントのパスを定義します
      3. */
      4. define("SERVER_ROOT", dirname(__FILE__)); 🎜>
      5. define(
      6. 'SITE_ROOT' , 'http://yourdomain.com') ; 🎜>
      7. /**
      8. * router.php の導入
      9. */
      10. require_once(SERVER_ROOT . '/controllers/' . 'router.php');
      11. すべてがうまくいけば、ブラウザを開いて次のように入力します:

      http://ドメイン名.com/index.php?news&article=howtobuildaframework


        次の出力が表示されます

      [html]
      view plain
      copy
      1. リクエストしたページは 'news' です
      2. 次の GET 変数がページに渡されました:
      3. 配列
      4. (
      5. [記事] => howtobuildaframework
      6. ) )
      7. >上記の出力がない場合, サーバーの構成が正しいかどうかを確認し、コードにエラーがないかどうかを確認してください。
      次に、Web サイトにページを追加して、router.php が上記の情報を直接出力する代わりにページを生成できるようにしましょう。
      コントローラーの作成
      「news.php」という名前の新しいファイルを作成し、次のクラスを定義します。 🎜>
      [php] プレーンに表示 コピー
      1. /**
      2. * このファイルは記事のクエリを処理し、記事を提供します
      3. */
      4. クラス News_Controller
      5. {
      6. /**
      7. * $template 変数は、.php 接尾辞を除いた、このコントローラーに関連する「ビュー」のファイル名を保存します
      8. */
      9. public $template = 'ニュース';  
      10. /**
      11. * このメソッドはデフォルトで Route.php で呼び出されます
      12. *
      13. * @param array $getVars Index.php に渡される GET 変数配列
      14. */
      15. public function main(array $getVars) >
      16. print
      17. 「ニュースです!」
      18. ; print
      19. '
        '
      20. ;
      21. $vars
      22. = print_r( $getVars, TRUE);
      23. print
      24. (
      25. 「次の GET vars がこのコントローラに渡されました:」 .
      26. "
        "</span><span style="margin:0px; padding:0px; border:none; background-color:inherit">.</span><span class="vars" style="margin:0px; padding:0px; border:none; color:rgb(221,0,0); background-color:inherit">$vars</span><span style="margin:0px; padding:0px; border:none; background-color:inherit">.</span><span class="string" style="margin:0px; padding:0px; border:none; color:blue; background-color:inherit">"
        "
      27. );  
      28. }
      29. }

      関連ラベル:
      ソース:php.cn
      このウェブサイトの声明
      この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
      人気のチュートリアル
      詳細>
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート