質問: 検索してもなかなか出てこなかったので、質問させていただきます。 phpもある程度理解できるようになったので、 すごく簡易的なMVCの独自フレームワークを作成しています。 現在、以下のサイトを参考にしながら独自フレームワークを作成しています。 そこで、Viewとcontrollerのアクションの紐付けに関してなのですが、 先ほどのサイトよりViewのセクションで、Smartyを使用してテンプレートと紐付けをしていると思います。 おそらく、以下の記述かと思います。 ``` $smarty->display('sample.tpl'); ``` しかし、今回はphpのみで完結させたいなと考えており、 smartyを組み込んでのフレームワーク作成は次回にしようと思っています。 Smartyを使用せずに、controllerのactionとテンプレートを紐づけるには どのような実装をしたら良いでしょうか? ちなみにURLは * **http://192.168.33.10/myapp/?cont=[Controller名]:[Action名]** で、コントローラーとアクションを識別しています。 --- 具体的にした方が、より明確な回答を得られるとアドバイスをいただいたので 追記いたします。 私のイメージしているcontrollerのactionとテンプレートの紐付けとは 以下のような感じです。 ``` assign($msg,'post送信です。'); $view->setTmp('sample.php'); } } ``` ``` //sample.php sample 送信 =$msg?> ``` 不足していることがありましたら、修正します。 よろしくお願いいたします。
回答: > > 検索してもなかなか出てこなかったので > > > 検索しても出てこないのは当然かと思います。 独自フレームワークなのであればそれこそドンピシャな情報は載っていません。 基本は**どうすればできるか自分で考えること**です。 > > Smartyを使用せずに、controllerのactionとテンプレートを紐づけるには > > どのような実装をしたら良いでしょうか? > > > 独自フレームワークなのであればお好みのようにすれば良いと思います。 おおよそはコントローラーのアクションに紐づかせるものですし。 どのような構成か分からないので思うように答えますが、 例えば、設定を配列か何かで持っておいて紐づかせるやり方でもいいですし ``` $viewSetting = [ "コントローラA"=>["アクション1"=>"ビュー","アクション2"=>"ビュー",], "コントローラB"=>["アクション1"=>"ビュー","アクション2"=>"ビュー",] ]; ``` いっそアクションに直に書いてもいいのではと。 アクションでどういう処理を書こうとしているのか分からないですが、 ビューのテンプレートを作っておいてアクションではコンテンツ部分を作るだけに終始して、 同じ変数で受け取ってテンプレートに流すでも良いですし。 ↓アクションからは必要なデータをreturnさせる ``` echo << {$data["title"]} {$data["contents"]} HTML; ``` 幾らでもやりようはあるので、自分がやりやすい方法を考えたら良いかと思います。 既存フレームワークを参照するのが最も参考になると思いますよ。 Smartyなり何なりテンプレートエンジンを使ってたとしても、 結局は「ビューに必要な情報を準備して、渡す」のがコントローラのアクションが行うことなので。 ビューは基本は来たデータを表示するだけです。