2

私は最初のシングルエントリーサイトをやっていて、その結果に基づいて、私は利益を見ることができません。

私は以下を実装しました:

  • .htaccessは、すべてのリクエストをルートのindex.phpにリダイレクトします
  • URLが解析され、各/segment/が要素として配列に格納されます
  • 最初のセグメントは、含めるフォルダーを示します(例:「users」»「/ pages / users / index.php」)。
  • 各フォルダーのindex.phpファイルは、配列が空になるまで、segments配列の残りの要素を解析します。
  • セグメント配列に要素がない場合は、各フォルダーのcontent.phpファイルが含まれ、宛先ファイルに到達したことを示します。

サンプル

ファイル構造([]内のフォルダー):

  • [根]
    • index.php
    • [ページ]
      • 【ユーザー】
        • index.php
        • content.php
        • [プロフィール]
          • index.php
          • content.php
          • [編集]
            • index.php
            • content.php
      • 【その他のページ】
        • index.php
        • content.php

リクエスト: http: //mysite.com/users/profile/

  1. .htaccessはリクエストをhttp://mysite.com/index.phpにリダイレクトします

  2. URLが解析され、セグメント配列に含まれるもの:[1]ユーザー、[2]プロファイル

  3. index.phpは[1]を"pages/ users / index.php"にマップするため、そのファイルを含めます

  4. pages / users/index.phpは[2]をpages/users / profile / index.phpにマップするため、そのファイルを含めます

  5. セグメント配列には他の要素がないため、現在のフォルダー(pages / users / profile)のcontents.phpファイルが含まれます。


サイトのコンポーネント(たとえば、include_header()、include_footer()など)を含む関数を使用するよりも、これを行うことの利点は実際にはわかりません。したがって、私はひどく間違ったことをしていると結論付けます。それが何なのかよくわかりません。

4

2 に答える 2

4

お持ちのこのバージョンにはいくつかの機能がなく、非常に単純なフロントコントローラーパターンとしてのみ機能します。

ほとんどのシステムは、URLをページである単一のPHPファイルにマップしません。URLパスを、ページの作成方法を知っているコントローラーにマップします。

さらに、すべてのURLを直接ファイルにマップする必要はありません。たとえば、を見てくださいgithub.com/[username]/[repo]。何百万ものファイルを作成することはできませんbob/ajaxstuff/index.php。このプロジェクトの書き込みページが必要であることをコントローラーに伝えるには、正規表現を使用する必要があります。

$app->get('/:username/:repo', function ($username, $repo) {
    echo "Looking at $username's $repo";
});

これを正しく使用する方法を実際に把握するには、単純なSlimFrameworkのようなフル機能のルーティングシステムを使用することをお勧めします。

ルーティングの設計と理論について詳しく知りたい場合は、php-routerのreadmeとwarpspireの優れたURL設計の投稿を読むことをお勧めします。

それらのいずれかが多すぎる場合は、kleinと超シンプルなToroPHPライブラリを確認することもできます。

于 2012-10-22T16:52:58.773 に答える
2

これは、コンテンツがデータベースに保存されている場合は、通常、ファイルベースのシステムではなく、このアプローチを使用するためです。ページがスタンドアロンファイルの場合、再書き込みは不要です。

于 2012-10-22T16:57:11.910 に答える