問題タブ [front-controller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - フロントコントローラーで大きなswitchステートメントを使用しないでください
着信ajaxリクエストを処理するphpのフロントコントローラーを備えたより大きなアプリケーションがあります。アクション->メソッドマッピングを処理する良い方法を考えています。このコントローラーは、他のクラスのインスタンス化とそこでのメソッドの実行を担当します。
スイッチが大きくなりすぎて、醜いです。私は配列を作成することを考えていて、単純に次のことを行っていました。
しかし、それがどれほど効率的であるか、または他のより良い代替手段があるかどうかわからない場合、このコントローラーは大量の着信要求を処理するため、パフォーマンスが重要です。
ありがとう!
c# - IHttpAsyncHandler を使用した効率的な HTTP 要求の転送
Martin Fowler (リンク)のパターンに基づいて、HTTP フロント コントローラーを開発しています。私の場合、コントローラーには次の責任があります。 - カプセル化されたデータをアンマーシャリングする - リクエストを承認する - ロギング - リクエストを別のサーバーに中継/転送する
次の可能な解決策が思い浮かびました: - (同期) IHttpHandler、WebClient または HttpWebRequest クラスで要求を転送する - (非同期) IHttpListener (非 IIS ソリューション) - (非同期) IHttpAsyncHandler
理想的な状況は、FC が CPU を消費することなく多数の同時要求 (>10000 TPS) を処理できることです。
ソリューションをテストするために、リクエストを行う 3 つのクライアント、中央に位置するフロント コントローラー、および FC によって渡されたリクエストに応答する 2 つのサーバーを持つ小さなフレームワークを作成しました。フレームワークは 3 つのシナリオのベンチマークを行います。最初に小さなペイロードで高速な応答をテストし、次に大きなペイロード (> 100KB) で高速な応答をテストし、最後に遅い応答 (>3 秒) と小さなペイロードでテストします。
同期 HTTP ハンドラーを使用した最後のテストでは、1 秒あたりのトランザクション数 (TPS) が極端に低くなりました (<25 TPS)。私の推測では、これはハンドラーが応答を待っているときにスレッドをブロックするためです。この問題を克服するために、非同期ハンドラーの実装を開始しました (以下のコードを参照)。問題は、単純に機能しないことです。
頭に浮かんだ最後の (テストされていない) 解決策は、HttpListener クラスを使用することです。これは、同時実行性をきめ細かく制御できる、より軽量なソリューションであると推測しています。José F. Romaniello (リンク) による RX フレームワークを使用した実装例を見てきました。
私の質問は、なぜハンドラーコードが機能しないのですか?これが最も効率的な方法ですか? または、HttpListenerソリューションを支持する必要があります。
非同期 HTTP ハンドラ コード:
symfony1 - すべてのアプリケーションリクエストは、symfony1.4の同じフロントコントローラーによってディスパッチされます
私はちょうどいくつかの奇妙な状況に直面しています。symfony 1.4に、2つのアプリケーション(apiとadmin)を持つプロジェクトがあります。私は以前2つのOSで作業していましたが、私のオフィスにはubuntuとwindow7があります。
オフィス(ubuntu 11.10)ではすべてが正常に機能していますが、自宅(XAMPPを使用するウィンドウ7)ではAPIアプリ(たとえば)からURLを要求するとhttp://www.domain.local/api_dev.php/users.xml
、答えを与えるフロントコントローラーは管理者(admin_dev.php)です。結果として、そのルートは管理アプリではなくAPIで定義されているため、404エラーが発生します。
gitを使用してバージョン管理を行っているため、プロジェクトコピーなどのエラーを破棄しました。apiアプリケーションはsfDoctrineRestGeneratorPluginを利用しており、以前は正常に動作していましたが、オフィスではすべて問題がなかったため、エラーが発生したときに気づきませんでした。キャッシュをクリアして、オフィスのプロジェクトからプロジェクトのクローンを作成しようとしましたが、成功しませんでした。
XAMPPの問題は、以前は正常に機能していて、http://www.domain.local/api_dev.php/product.xml
次のログエントリを要求しているため、私には思われません。
admin_dev.log
Apr 03 14:42:09 symfony [err] {sfError404Exception} Empty module and/or action after parsing the URL "/product.xml" (/).
api_dev.log[空のログファイル]
リクエストした場合:
http://www.domain.local/api_dev.php/
管理者のホームページに移動しますが、リクエストした場合:(
http://www.domain.local/api_dev.php
スラッシュがないことに注意してください)APIのデフォルトのインデックスルートに移動します。そして、api_dev.logで、期待されるエントリを取得します。これは私にルートの問題を考えさせますが、アイデアは出てきません。
両方のアプリで、次のようなデフォルトのホームページルートがあります。
-API-
-管理者-
聞いてくれてありがとう、そして時間を割いてくれてありがとうどんな助けやアドバイスも本当にありがたいです。
ありがとうDavid
zend-framework - ZF-デフォルトのコントローラーを動的に変更する
モバイルデバイスからリクエストが来た場合に備えて、デフォルトのコントローラーとして別のコントローラーをロードする必要があります。プラグインでフロントコントローラーインスタンスを取得し、デバイスの検出に基づいてデフォルトを設定しようとしましたが、機能しません。
FC設定を動的に変更する方法はありますか?
編集:
プラグインは登録されて機能していますが、残りのコードは機能していません
php - .htaccessを使用してphpフロントコントローラーを動作させる方法は?
クエリ文字列を使用してフロントコントローラーを実行しました。
元:
しかし、クエリ文字列を使用せずにそれを行う必要があります。
spring - フロントコントローラー付きSpring MVC
multiActionController で MVC を使用して Web サーバーを開発しています。ただし、今はフロントコントローラーでリクエスト ( /* )を処理したいと考えています。その後、この Front Controller はこのリクエストを ModelAndView の View に転送します。ただし、Googleで何度も検索した後でも、実装方法がわかりません。私はあなたの助けに感謝します。
php - nginxのPHPフロントコントローラー
/wiki/view/pagename
やのような URL を持つユーザー生成コンテンツをホストする wiki があります/wiki/modify/pagename
。次のようなnginx構成を使用しています:
それはうまく機能しており、私が知る限り、これが推奨されるアプローチです。しかし、今日、ユーザーが「whatever.php」という名前のページを作成したため、URL/wiki/view/whatever.php
を my にリダイレクトする必要があります/wiki/index.php
...しかし、2 番目のロケーション ブロックに引っ掛かり、ユーザー エージェントに 404 を返します。
誰か提案はありますか?実際のルーティング ページに影響を与えないように、*.php をメイン スクリプトのどこかに書き換えるために、追加のロケーション ブロックを追加できますか? nginx を使用して、/wiki/
ディレクトリ内の静的コンテンツを提供し、このディレクトリ外のすべての動作を保持したいと考えています。
このデッド フォーラム スレッドの再投稿
php - MVCアーキテクチャ用のマルチレベルコントローラー
アプリケーションに現在使用しているMVCアーキテクチャの制限の1つに遭遇しました。現在、私のURLは次のようになっています。
各リクエストはフロントコントローラーに到着し、フロントコントローラーはURLからリクエストされたコントローラークラスをロードし、そのアクション(メソッド)を実行します。ネストされたコントローラーの使用を開始する必要があるまで、これは正常に機能します。
例:createUser()、editUser()、deleteUser()などのメソッドを保持する「users」コントローラーがあります。現在のURL構造ですべて完全に可能です...しかし、ユーザータイプも管理する必要がある場合はどうでしょうか。createUserType()、editUserType()などのメソッドも保持する別のコントローラー'usertypes'が必要になります...ただし、ユーザータイプはユーザーの一部であるため、'usertypes'コントローラーはusersコントローラー内にネストする必要があります。 :
ただし、現在のURL構造では、これは不可能です...ネストされた(または、必要に応じてマルチレベルの)コントローラーを使用するにはどうすればよいですか?
更新:これが私が取り組んでいるアプリケーションの基本的な表現です:これは、3つのカテゴリ(プロモーション、メーリング、カード所有者)のデータを追加、表示、編集、削除できる管理部門向けの基本的なビジネスアプリケーションです。各カテゴリはデータベース内のテーブルを表し、独自の個別のフィールドがあります。アカウントは管理者が作成する必要があり、ユーザーは自分でアカウントを作成したり、ユーザープロファイルを参照したりすることはできません。
これらのカテゴリごとに、add()、edit()、getAll()、getSingle()、delete()などのアクションを保持するコントローラーを作成しました。これらの各アクションは、モデルから適切なメソッドを呼び出します。対応するビューをレンダリングします。
これはすべて、次のようなURLを持つ現在のURL構造で可能でした。
最近、彼らは私に、プロモーション、郵送物、カード所有者の種類も管理できるようにするように頼みました。現在、彼らはすでに学校割引、20%割引などを持っています...しかし、彼らは彼らが望むようにもっと追加したいと思っています。
これは、add()、getAll()、getSingle()、delete()などのアクションも保持するPromotionTypesコントローラーが必要であることを意味します...PromotionTypesコントローラーを元のプロモーションコントローラーにネストできると便利です。 URLはそのように:
それ以外の
私の現在のフロントローダーでは、URLの最初の部分が自動的にコントローラーとして扱われ、2番目の部分がそこから実行するアクションとして扱われるため、これは不可能です。
php - CSS および JS リクエストをフロント コントローラーにルーティングする (パフォーマンス測定)
シンプルな MVC ライブラリを構築しました。フロントコントローラーがあります。htaccess ファイルは、画像、js、および css を除くすべてのリクエストをフロント コントローラーに送信します。しかし、PHP で JS および CSS ファイルを作成したいという問題があります。(毎回ではありませんが、たまにあります。)
この目的のために、CSS および JS ファイル要求をフロント コントローラーに送信することを計画しています。そこから、別の PHP が対応する CSS または JS ファイルを「インクルード」し、それをクライアントに返します。CSS や JS が含まれている場合は、PHP インタープリターによっても処理されます。
私が思うのはパフォーマンスですが。現時点では開発のみを行っており、何千もの要求が来たときにシステムがこの種の手法にどのように応答するかを確認できません. 大きなシステムを構築すると、すぐに変更するのは難しいからです。そのため、早い段階でこの機能を MVC に組み込みたいと考えています。
誰かがこのような手法を試した場合、パフォーマンス測定を聞きたいです。
php - フロント コントローラー パターンと MVC を使用したコントローラーの入れ子
MVCアプローチを使用してPHPでWebアプリケーションを開発しています(フレームワーク、純粋なPHPを使用していません)。MVC でよくあることですが、すべての要求はフロント コントローラーに到着し、フロント コントローラーはそれを対応するコントローラーにルーティングし、要求されたアクションを実行します。URL 構造は次のようになります。
さまざまなカテゴリの製品を扱う e コマース サイトを構築しているとします。可能な URL は次のとおりです。
最初の URL では、"sofas" コントローラーが読み込まれ、その overview() メソッドが実行されます。これらの製品を親カテゴリ内にネストする必要があるまで、これはすべてうまく機能します。私が何を意味するかを示すために、前の 2 つの URL を使用します。
現在、「ビデオゲーム」コントローラーは「電子機器」コントローラー内にネストされています。ただし、現在の 'load controller -> execute action' 構造では、これは機能しません。
考えられる解決策は、存在しないアクションが要求された場合 (「ビデオゲーム」) に実行される親コントローラー (「電子機器」) 内にメソッドを作成することです。このメソッドは、要求されたアクションがコントローラーとして存在するかどうかを確認します。その場合、コントローラーがロードされ、そのアクション (「概要」) が実行されます。
ここSOを含め、標準のフロントコントローラーパターンのこの制限に対する解決策を無益に探しました。MVC の実装は正しいと思いますが、フロント コントローラーにはまだ制限があります。