/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       [後へ]   [目次へ]   [次へ]