7

私は現在、独自の PHP フレームワークに取り組んでおり、正しい方向に進んでいるかどうかを判断するための助けが必要です...

このフレームワークは、私自身の使用と、一般的に私の PHP スキルをさらに向上させるためのものです。私は多くの問題に遭遇しましたが、それらを克服することで多くのことを学び、ゼロから何かを作成できることが大好きなので、「Zend を使用するだけ」などの回答を見たくありません! ;)

私は Stack Overflow と他の多くのサイトの両方でたくさんの記事を読みましたが、必要な正しい答えを得ることができません。

いくつかの異なる解決策を試しましたが、混乱してしまい、どちらの方向に進むべきかわかりません! 全く頭に入らない...

「理論的な」フレームワーク構造

- .htaccess
- index.php
- private/
    - app/
        - bootstrap.php
        - modules/
            - default/
                - controllers/
                    - pages.php
                    - index.php
                - models/
                - views/
            - admin/
                - controllers/
                - models/
                - views/
    - config/
        - config.php
        - autoloader.php
    - lib/
        - Some_Library
            - Class1
                - class1.php
            - Class2
                - class2.php
- public/
    - css
    - images
    - scripts

詳細

  • index.phpはメイン ファイルで、すべてのリクエストが.htaccessでルーティングされます。
  • private/は明らかに公にアクセスできません。
  • public/にはすべてのパブリック ファイルが含まれます。
  • app/には、すべてのアプリ固有のコードが含まれています。
  • lib/には、オートローダーで呼び出される Zend または別のライブラリ (私も自分で作業しています) を含めることができます。
  • bootstrap.phpはアプリ固有のコードです...これは必要ですか? メインの「index.php」で十分ですか?.
  • modules/には各モジュールが含まれます...モジュールはまったく必要ですか? .
  • default/は、ほとんどのリクエストの MVC を含むデフォルト モジュールです (「admin」が URL の最初の部分でない場合に使用されます)。
  • admin/は、管理セクションの MVC を含むモジュールです。

とにかく、私の質問に...

管理セクションを Web サイトの残りの部分から分離した方がよいと考えましたが、ここで行き詰まっています。上記の構造で動作するようにしましたが、これが最も効果的な方法かどうかはわかりません。

site.com/videos/view/1/というリクエストが私のサイトに来たら..

モジュール: デフォルト コントローラ: ビデオ アクション: ビュー パラメータ: array( '1' )

そして、リクエストsite.com/admin/pages/view/1/が私のサイトに来た場合..

モジュール: 管理 コントローラ: ページ アクション: ビュー パラメータ: array( '1' )

これはこれについて正しい方法ですか?それとも、私はそれを過度に複雑にして、やる価値のないことをしていますか?

管理セクション用に完全に別のアプリケーション フレームワークを用意する必要がありますか? 管理セクションの MVC を残りのすべてから分離する必要さえありますか?

大規模な質問で申し訳ありませんが、できるだけ多くの情報を提供したかっただけです! 答えられる部分は自由に答えてください=P

4

3 に答える 3

2

管理ルーティングの 1 つの解決策は、CakePHP が行うことです。最初に管理文字列の構成を定義してから、コントローラーで特定の名前変換を使用してアクションを使用します。

//Configuration ============================
Configure::write("admin_routing" , true );
Configure::write("admin_prefix"  , "admin" );

//Controller ===============================
class MyController extends AppController{

    function index(){
      //Will map to /mycontroller/
    }


    function admin_index(){
      //Will map to /admin/mycontroller/
    }

}

ルーティング システムを使用してこれを一般化できます。お気に入りのフレームワークがどのように機能するかを見てください。

別の注意事項

  1. モジュールフォルダは不要のようです
  2. アプリケーション間で共有するには、グローバルビューとモデルフォルダーを追加する必要があるantpawに同意します
  3. オートローダーが lib ディレクトリの一部ではなく config ディレクトリ内にある理由がわかりません。boostrap.php を config ディレクトリに移動することもできます

お役に立てれば

于 2010-06-15T22:14:04.863 に答える
2

これはずっと前に尋ねられたことは知っていますが、数日前にまったく同じ状況にありました。

質問者が提案した解決策は、奇妙なことに、基本的に私が行ったものです。基本的に、ASP.NET MVC2 の「領域」という概念を借用しました。エリアは、独自のコントローラーとビューを持つサイトのセクションです (モデルもありますが、理由はわかりません... モデルは一般的に普遍的でなければなりません)。したがって、これは最初のアイデアと非常によく似ています。

いずれにせよ、フォルダー + ルーティング構造に従うことは、私のアプリケーションにとって非常に理にかなっています (管理者タイプ領域、ユーザー領域、およびその間の別のレベル)。それを見て、そこにいくつかの成功を見つけるかもしれません。

私のルーティングでは、エリアのみが考慮されます。ルートはハードコーディングされているので、別のエリアが必要な場合はルーティング ファイルを調整するだけです。また、$area が指定されている場合、私のオートローダーは area フォルダーを参照するように設定されています。

/admin/team/add/は次のように読みます。エリア: 管理者、コントローラー: チーム、アクション: 追加

一方

/team/add/エリア: [なし]、コントローラー: チーム、アクション: 追加

フォルダ構造は次のようなものです。

app/
   areas/
      admin/
          controllers/
          views/
      staff/
          controllers/
          views/
   controllers/
   models/
   views/
于 2011-05-13T04:32:42.717 に答える
1

すべてのルーティングを管理する bootstrap.php を使用することをお勧めします。これにより、「管理モジュールにもう 1 つのフォルダーをネストできたらいいのに」などの問題が発生することはありません。

また、モジュールを使用せず、デフォルトのコントローラーをコントローラー/ディレクトリ内に保持し、管理コントローラーをコントローラー/管理ディレクトリ内に保持します。モデルとビューについても同じです。

ところで、アプリケーションの異なる部分間でモデルを共有しないのは賢明ではありません。すべてのケースの 99% で同じになります。それが mvc が非常に強力な理由です。フロントエンドとバックエンドの間でアプリ内の一部のビュー パーツを共有できる場合もあります。

于 2010-06-14T20:30:50.527 に答える