きまブログ

2022-12から再開しました。

FuelPHPで勉強するMVC - View編

MVCのV - FuelPHPのView (ビュー)編

【備忘録】FuelPHPをインストールしてみる。 - きまブログ
FuelPHPで勉強するMVC - Controller編 - きまブログ に続き、
FuelPHPを使って、
フレームワークの肝である、MVCを勉強&実践していきます。
のView編です。


書いてあることは、あくまで初心者レベルの理解ですので、あしからず。

よくある説明 - View編

コントローラーのメソッドの最後に、

return View::forge(‘cccc’, $data);

みたいに書いておくと、
$dataの連想配列へ保存した値が、cccc.phpで使えるようになるので、
cccc.phpでhtmlを書いて表示しましょう。


"::" (ダブルコロン)は、「スコープ定義演算子」というのですが、
ボクの認識は、クラスメソッドへのアクセス演算子です。。

実際にやってみた - View編

たしかに。。できますね。
これは、Viewクラスのforge()というクラスメソッドを使ってます。


つまり、ビューとは、

表示に必要なデータをまとめた配列(ここでは$data)を受け取って、
その「データをHTMLに埋め込んでいく」機能。

と、言えるようです。


すると、
Controllerから、表示部分 View が別ファイルに分離できることになります。


この段階では、こんな感じで分離できた感じ。
- Controller : アクセス系+データ処理系
- View : 表示系

サンプル - View編

変更点:

  1. dateコマンドの結果を $data['date_time'] という連想配列に入れたこと。
  2. printコマンドで表示していたのを、View::forge メソッドに置き換えたこと。
/fuel/app/classes/controller$ cat aaaa.php 
<?php

class Controller_Aaaa extends COntroller
{
  public function action_bbbb()
  {
  $data['date_time'] = date('Y-m-d\TH:i:s',time())." - by action_bbbb() method";

  return View::forge('cccc', $data);
  }

  public function action_index()
  {
    print("action_index() method");
  }
}
?>

View の中では、$dataは連想配列のキーと同じ名前の変数に分解されているみたい。
Viewのファイルを入れておくパスは、なぜか「/fuel/app/views/」です。
変数を展開するだけだと悲しいので、HTMLっぽくしておきます。
見た目は変わりませんが。。

/fuel/app/views$ cat cccc.php 
<html>
<head>
<title>sample - MVC View</title>
</head>
<body>
<?php echo $date_time; ?>
</body>
</html>
メモ - View編
  1. Controllerで、View::forge()をreturnしてるけど、これって誰にリターンしてるの?
    たぶん、/public/index.phpだと思うけど。。
    キーワード:rewrite, PATH_INFO, Requestクラス, Responseクラス あとで調べよう。
  1. ModelView(presentation) というのはまだナゾ。
  1. データの埋め込み方について

「データの埋め込み方(テンプレート)」には、いくつかの流派があり、
FuelPHPでは、オプションで、いくつかの流派に対応しているようです。


デフォルトだと、普通にPHPなので、結局HTMLの途中に

<?php echo $foo ?>  

みたいなコトになり、ガッカリで面倒なことになりますが、


テンプレート(エンジン)を使うと、わりとスマートに書けるようになるらしい。
テンプレートには、
有名どころ:Smarty
軽量:SimpleTemplate、Twig
などがあるみたい。


これは、Viewの作成を楽にするための機能であり、MVCという「構成」とは直接関係ありません。
でも、サンプルでは必要ないですが、実践的なWebアプリを開発するとなると有用なので、
あとで勉強することにします。


では、次は、MVCのM(モデル)を使ってみます。