実際、MVC アプリケーションを自分で実装するのは難しくありません。MVC のすべてのコンテンツがコントローラーを通過する必要があることはわかっています。では、制御をコントローラーに渡すにはどうすればよいでしょうか。
エントリー ファイルが必要です。実際、エントリー ファイルは、渡されたリクエストを対応するコントローラーに渡す役割を果たします。
学習の必要に応じて、ユーザーはコントローラーの名前とアクションの名前を GET 経由で渡し、エントリーファイルには特定のファイルが含まれます。事前に合意されたルールに従って、このクラスをインスタンス化し、このクラスの対応するメソッドを呼び出します。
01 |
02 | $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //设置了默认的控制器 |
04 | $controllerBasePath = dirname(__FILE__) . '/modules/controllers/'; |
02
05 | $controllerFilePath = $controllerBasePath . $controller . 'Controller.php'; |
06 | if(is_file($controllerFilePath)) { |
< /た、>
07 | include $controllerFilePath; |
08 | $controllerName = $controller . 'Controller'; |
09 | if(class_exists($controllerName)) { |
10 | $controllerHandler = new $controllerName(); |
11 | if(method_exists($controllerHandler,$action)) { |
12 | $controllerHandler->$action(); |
13 | } else { |
14 | echo 'the method does not exists'; |
15 | } |
16 | } else { |
17 | echo 'the class does not exists'; |
18 | } |
19 | } else { |
20 | echo 'controller not exists'; |
21 | } |
実際、実装されている関数は比較的単純で、GET で渡されたコントローラー名とアクション名を受け入れるだけです (渡されなかった場合)。コントローラー名またはアクション名が呼び出される場合、ユーザーがコントローラー名とアクション名を渡すと、以前に合意したルールでは対応するファイル、クラス、またはメソッドが見つからないという問題が発生する可能性があります。その場合はフレンドリに表示する必要があります。 PHP に一連の警告をスローさせる代わりに、情報を提供することは、プログラムの堅牢性にとって非常に役立ちます。
コントローラーを使用すると、モデルとしてはすべてが単純になりますが、機能的にはビジネス ロジックの処理を担当します。
1 |
2 | class IndexModel { |
4 | return 'Hello world!'; |
2
5 | } |
6 | } |
<テーブル>
パブリック関数 test() {
4
01 |
02 | class IndexController { |
<テーブル>
03 | public function index() { |
04 | $modelPath = dirname(__FILE__) . '/../models/IndexModel.php'; |
05 | if(file_exists($modelPath)) { |
06 | include $modelPath; |
07 | $model = new IndexModel(); |
08 | echo $model->test(); |
09 | } else { |
10 | echo 'model does not exists'; |
11 | } |
12 | } |
13 | } |
モデルができたので、ビューをどのように接続すればよいでしょうか?
1 |
2 |
3 |
4 |
5 |
6 |
7 |
ビューを作成した後、コントローラーを介してこのビューを呼び出すにはどうすればよいですか?
コントローラーを次のように変更します:
01 |
02 | class IndexController { |
04 | $modelPath = dirname(__FILE__) . '/../models/IndexModel.php'; |
02
05 | if(file_exists($modelPath)) { |
06 | include $modelPath; |
07 | $model = new IndexModel(); |
08 | $var1 = $model->test(); |
09 | $viewPath = dirname(__FILE__) . '/../views/index.php'; |
10 | if(file_exists($viewPath)) { |
11 | include $viewPath; |
12 | } else { |
13 | echo 'view does not exists'; |
14 | } |
15 | } else { |
16 | echo 'model does not exists'; |
17 | } |
18 | } |
19 | } |
このような MVC アプリケーションは比較的簡単にセットアップできますが、まだ多くの問題があります。 ! !