/bonvhp/webapp/Smarty       [後へ]   [目次へ]   [次へ] ~ [] ~

Smarty:MVC モデル

ややこしさを解消するには?

先のお題で、
HTML 埋め込み型言語で WEB アプリを書くと、
メンテナンス性が悪い、という話をしました。

根本原因は、
  データを制御する PHP と、
  見た目を担当する HTML とが、
  絡み合っている事
です。

絡み合っているのが NG なのだから、
「分離すればいい」
という事になります。

ここで、
「MVC モデル」
という考え方が登場します。

MVC とは、
Model、View、Control の頭文字で、

・Model  : データを制御する部分
・View   : 見た目を担当する部分
・Control: Model と View の橋渡し担当

の事です。
つまり、C を経由する事で、
M と V を分けてしまおう、という事です。

View には、
メニューやテキストの入力を受け付ける部分も含みます。

・Model は、データベースへの入出力
・View  は、人間への入出力
です。

この考え方を実現する手段は、いくつもありますが、
その中のひとつが Smarty です。

では、
先のお題を Smarty を使って書くとどうなるかを
示しておきます。

実際の動かし方や、
細かなコードの中身については、追々説明していくので、
今は、Vew (HTML) のややこしさが解消されている感じを見てもらえれば十分です。

・Model, Control 部分のファイル:sample.php
<?php require_once("Smarty/libs/Smarty.class.php"); $o_Smarty = new Smarty(); $title = "List title:"; $list = array(1=>'red', 2=>'green', 4=>'blue', 7=>'white'); $o_Smarty->assign("title", $title); $o_Smarty->assign("list", $list); $o_Smarty->display('sample.tpl'); ?>
中身は、Smarty のおまじないが並ぶので、 ややこしく見えるかもしれませんが、 実際には、覚えることは少なくて、定型処理ばかりです。 後続のセクションで順に説明していくので安心してください。 ・View の部分のファイル:sample.tpl
<html> <body> {$title} {html_options name=list options=$list} </body> </html>
View 担当の sample.tpl では、 {$title} で、タイトルが、 {html_options ...} で、プルダウンメニューが、 それぞれ表示されることになります。 幸い、見た目とコードも一致しています。 # コードの内容によっては違いが出る事もありますが、 # 本質的な話ではありません。 ここで最大のポイントは、 ・sample.php に HTML が無い ・sample.tpl に PHP のコード無い という事です。 つまり、PHP と HTML が分離できたわけです。 # 実運用では、Model と Control も別ファイルにしますが、 # 今は、データを固定しているので、 # Model を担当するファイルはありません。 この2つのプログラム sample.php と sample.tpl は、 この後のセクションでも使用します。
蛇足ながら、 先のセクションで言っていた、 「プルダウンメニューをやめて、ラジオボタンのリストに変えたい」 をやってみると、
<html> <body> {$title} {html_radios name=list options=$list} </body> </html>
になります。 sample.tpl の html_options を html_radios に書き換えただけです。 先の PHP, HTML 混在コードで変えようとしたら、 少なからず書き直しが必要です。 このあたりの話は、MVC とは関係ありませんが、 Smarty を使うと便利だという点では、大いに意味があります。
/bonvhp/webapp/Smarty       [後へ]   [目次へ]   [次へ]