ホームページ  >  記事  >  php教程  >  PHP フレームワークを段階的に書く (2)

PHP フレームワークを段階的に書く (2)

WBOY
WBOYオリジナル
2016-06-21 08:50:401004ブラウズ

実際、MVC アプリケーションを自分で実装するのは難しくありません。MVC のすべてのコンテンツがコントローラーを通過する必要があることはわかっています。では、制御をコントローラーに渡すにはどうすればよいでしょうか。

エントリー ファイルが必要です。実際、エントリー ファイルは、渡されたリクエストを対応するコントローラーに渡す役割を果たします。

学習の必要に応じて、ユーザーはコントローラーの名前とアクションの名前を GET 経由で渡し、エントリーファイルには特定のファイルが含まれます。事前に合意されたルールに従って、このクラスをインスタンス化し、このクラスの対応するメソッドを呼び出します。

01

01

02 $controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']); //设置了默认的控制器

03 $action = empty($_GET['a']) ? 'index' : trim($_GET['a']); //设置了默认的Action

04 $controllerBasePath = dirname(__FILE__) . '/modules/controllers/';
<テーブル>

02

05 $controllerFilePath = $controllerBasePath . $controller . 'Controller.php';

06 if(is_file($controllerFilePath)) {
$controller = empty($_GET['c']) ? 'Index' : trim($_GET['c']) //デフォルトのコントローラーが設定されています

< /た、>

07 include $controllerFilePath;

<テーブル>

08 $controllerName = $controller . 'Controller';
03

09 if(class_exists($controllerName)) {

$action = empty($_GET['a']) ? 'index' : trim($_GET['a']) //デフォルトのアクションが設定されています

10 $controllerHandler = new $controllerName();
<🎜> <🎜> <テーブル> <🎜><🎜>04<🎜><🎜> <🎜><🎜>$controllerBasePath = dirname(__FILE__) '/modules/controllers/';<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>05<🎜><🎜> <🎜><🎜>$controllerFilePath = $controllerBasePath . 'Controller.php';<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>06<🎜><🎜> <🎜><🎜>if(is_file($controllerFilePath)) {<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>07<🎜><🎜> <🎜><🎜> include $controllerFilePath;<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>08<🎜><🎜> <🎜><🎜> $controllerName = $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

1

2 class IndexModel {

3 public function test() {

4 return 'Hello world!';
<テーブル>

2

5 }

6 }
クラス IndexModel {

<テーブル> 3

パブリック関数 test() { <テーブル>

4

01

return 'Hello world!';

02 class IndexController {

<テーブル>

03 public function index() {
<🎜>5<🎜><🎜> <🎜><🎜> }<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>6<🎜><🎜> <🎜><🎜>}<🎜><🎜> <🎜> <🎜> <🎜> <🎜> <🎜><🎜> デモとして、このモデルで Hello World を返すだけです。では、コントローラーはこのモデルをどのように使用するのでしょうか?実際、これは、まずファイルをインクルードし、次にクラスをインスタンス化し、対応するメソッドを呼び出すことを意味します。 <🎜><🎜><🎜> <🎜> <🎜><🎜> 次に、コントローラーを次のように変更します: <🎜><🎜><🎜> <🎜> <🎜> <🎜> <テーブル> <🎜><🎜>01<🎜><🎜> <🎜><🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>02<🎜><🎜> <🎜><🎜>クラス IndexController {<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>03<🎜><🎜> <🎜><🎜> パブリック関数 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
1

2     
テーブル> 2 <頭><🎜><🎜>

3
4     

5         

6     

7

ビューを作成した後、コントローラーを介してこのビューを呼び出すにはどうすればよいですか?

コントローラーを次のように変更します:

01

01

02 class IndexController {

03 public function index() {

04 $modelPath = dirname(__FILE__) . '/../models/IndexModel.php';
<テーブル>

02

05 if(file_exists($modelPath)) {

06 include $modelPath;
クラス IndexController {

07 $model = new IndexModel();
<🎜> <テーブル> <🎜><🎜>03<🎜><🎜> <🎜><🎜> パブリック関数 Index() {<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>04<🎜><🎜> <🎜><🎜> $modelPath = dirname(__FILE__) . '/../models/IndexModel.php';<🎜><🎜> <🎜> <🎜> <テーブル> <🎜><🎜>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 アプリケーションは比較的簡単にセットアップできますが、まだ多くの問題があります。 ! !



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。