0

PHP での関心の分離に関する知識を広げようとしています。私は1年以上練習しており、練習用に独自のmvcフレームワークを作成しようとしています。今、私はルーティングと MVC トライアドを開始する方法で再び立ち往生しています。

これuriをマップしたいので、どれを使用するかを識別controllerできviewます

$uri = filter_var(rtrim(filter_input(INPUT_GET, 'url', FILTER_SANITIZE_STRING), '/'), FILTER_SANITIZE_URL);

このコードはbootstrap.php、エントリ ポイントとして機能するファイルにあるとしましょう。

Tom Butler のブログを読んでいるうちに、ビューがモデルにアクセスできるようにする必要があるなど、多くのことを認識していますが、完全ではなく、a を使用するviewmodel方が良いか、単にモデルを使用する必要があります。

IOC私は彼または彼の Dependency Injection Containerに出くわし、 それを試すことに興味を持ちました。

その記事に欠けているのはディスパッチの部分です。私はそれを学ぶことに非常に興味を持っています。それを機能させるためにいくつかのことを試みましたが、役に立ちませんでした。

これを実装したかったのは、の単一の呼び出しでcontrollerビュー間で依存関係を共有できるようにしたいからです。

$route = $router->getRoutes(); // maybe something that return a Route object with Controller, and View object that has already shared dependecies.

上記の段落に関する私の理解が正しいかどうか、またルーティングに本当に役立つかどうかはわかりません。私が間違っている場合は修正してください。

本当の問題は、ディスパッチャーがどのように見えるかということです。そして、もし私がconvention over configurationミスターのものを使うとしたら。トム、ブートストラップでルートを個別に宣言する必要がありますか? これらのように

$dice->addRule('$route_user/edit', $rule);
$dice->addRule('$route_user/delete', $rule);
...

私はただできるのだろうか:

$controller->method($params)

必要なビューとコントローラーを決定した後。

4

1 に答える 1

0

この答えがあなたが望むものになるかどうかはわかりませんが、私がこのようにすると、よりrestFullになり、より「設定よりも慣習」になります。

  1. edit 、 delete には http 動詞を使用します...
  2. URL を処理する標準的な方法を使用します: "article/", "article/2" ここで、article はコントローラー名とビュー名です。
  3. 単純なルートには単純な配列ツリーを使用します。

    $bootstrap=[ ... "routes"=>[ "myFirstCategory"=>[ "art"=>"article", ... ], "mySecondCategory"=>[ ... このように、myFirstCategory/art はルートツリーを処理する再帰関数を使用して、アーティクルコントローラーとビューにリダイレクトされます

  4. このツリーでは、複雑なルールにコールバック ルールを使用できます (そのコールバックは、ルート ツリーの再帰関数によって処理する必要があります。

    ... "art"=>function($myContainer){...return ['view'=>$view,'controller'=>$controller,'id'=>$id...];}.. .

より使いやすくするためのちょっとしたアイデアです...

于 2013-07-28T09:34:33.150 に答える