ほとんどすべての PHP フレームワークは単一エントリ ファイル方式を使用します。これは、すべてのリクエストがindex.php から入力されることを意味します。次に、ファクトリ パターンを使用してリクエストの分散を実現する必要があります。
たとえば、次のような URL をリクエストしています:
http://www.test.com/index.php?c=User&a=index
これは、User コントローラーのインデックス メソッドをリクエストする必要があることを意味します。つまり、index.php はパラメーターに基づいてユーザー コントローラーのインスタンスを作成し、index メソッドを呼び出す必要があります。 「工場」の機能を実装しているようです。
次のようなファクトリ クラスを実装できます:
class Factory{ public static function getInstance($controller_name,$action_name){ if(class_exists($controller_name)){ $controller = new $controller_name; if(method_exists($controller,$action_name)){ $controller->$action_name(); }else{ exit('action not found'); } }else{ exit('controller not found'); } } }
まず、コントローラー名とメソッド名を受け取り、ファクトリ クラス Factory の getInstance メソッドに渡します。 Factory は、コントローラーのインスタンス化と対応するメソッドの呼び出しを自動的に支援します。
これはファクトリ クラスであり、特定のパラメータを指定すると、残りの作業を自動的に実行します。
$controller_name = $_GET['c'];$action_name = $_GET['a'];Factory::getInstance($controller_name,$action_name);
クラスが存在しない場合は、次のプロンプトが表示されます: コントローラーが見つかりません
次に、コントローラーのインスタンスを作成します。メソッドが存在するかどうかを確認して実行します。
class_exists($controller_name);
これはファクトリ クラスの実装原則であり、もちろん、引き続き改善することができます。
多くの場合、コントローラーを別のファイルに配置します。このとき、ファクトリー クラスは最初にコントローラー ファイルを導入する必要があります。