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 を使うと便利だという点では、大いに意味があります。