プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、viewの入れ子について理解する
FuelPHPではviewの入れ子、つまりviewからviewを読み込めるのだそうな。
そこら辺をちょいと見ていこうかな、というのが今回のテーマです。

まずはシンプルなviewの入れ子φ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $view = View::forge('hoge/template_hoge');
    return $view;
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
    template_hoge<br />
    <?php echo View::forge('template_hoge2'); ?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />

結果φ(--)

template_hoge
template_hoge2

ふむ、普通ですな。

じゃあ次に、コントローラから変数は渡せるのかな?φ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $view = View::forge('template_hoge');
    $view->set('msg', "hogehoge");

    return $view;
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
    template_hoge<br />
    <?php echo View::forge('template_hoge2'); ?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />
<?php echo $msg ?>

結果φ(--)

Notice!
Fuel\Core\PhpErrorException [ Notice ]: Undefined variable: msg

APPPATH/views/template_hoge2.php @ line 2

0
1template_hoge2<br />
2<?php echo $msg ?>

「変数に値設定しろ、ばーか」って怒られた(--;

調べてみたら入れ子のviewに値を渡したいときには
「set()」ではなく「set_global()」を使うらしいφ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $view = View::forge('template_hoge');
    $view->set_global('msg', "hogehoge");

    return $view;
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
    template_hoge<br />
    <?php echo View::forge('template_hoge2'); ?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />
<?php echo $msg ?>

結果φ(--)

template_hoge
template_hoge2
hogehoge

おぉ、ちゃんと「hogehoge」が表示された。

呼出元viewからなら普通に設定できるかな?と思いやってみるとφ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $view = View::forge('template_hoge');
    return $view;
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
template_hoge<br />
<?php 
    $data = array('msg' => 'hogehoge2');
    echo View::forge('template_hoge2', $data); 
?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />
<?php echo $msg ?>

結果φ(--)

template_hoge
template_hoge2
hogehoge2

あぁ、やっぱりできましたか。

ちなみに、こんなこともできるみたいですφ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $view = View::forge('template_hoge');

    $data = array('msg' => 'hogehoge');
    $view->set('view2', View::forge('template_hoge2', $data));


    return $view;
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
template_hoge<br />
<?php echo $view2; ?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />
<?php echo $msg ?>

コントローラで親ビュー「$view」の変数「view2」に「変数『msg』に値を設定した子ビュー」を突っ込み
親ビュー「template_hoge.php」の中では$viewをechoしてるだけです。

結果φ(--)

template_hoge
template_hoge2
hogehoge

なんだかんだで動くのですね。

つまり

1.view内で「View::forge()」を使えば
 (もしくはviewを丸ごと変数として渡せば)viewの入れ子が可能
2.直接呼び出したviewに値を渡すときは「set()」でOK
3.直接呼び出していないviewに値を渡すときは「set_global()」を使う

ってことですかね。

viewの入れ子ができるのは助かる(と言うかできないと話にならない)けど
「set_global()」が個人的にはちょっとイヤかなーって感じです。
これって要はグローバル変数化するってことですもんね。

あっ、そうそう。
何が違うのかよく分からんけど「render()」を使って
こんな書き方もできるらしいですφ(--)

■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
    $sub_view = array();

    $data2 = array('msg' => 'hogehoge');
    $sub_view['view2'] = View::forge('template_hoge2', $data2)->render();

    return View::forge('template_hoge', $sub_view, false)->render();
}

■fuel/app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
template_hoge<br />
<?php echo $view2; ?>
</body>
</html>

■fuel/app/views/template_hoge2.php
template_hoge2<br />
<?php echo $msg ?>

「render()」つけなくても結果同じじゃん。とか言ったら怒られるのでしょうね。
サニタイズするとかしないとかそこら辺の違いですかね(--?
よく分からんけど。

まぁ取りあえずviewの入れ子の理解、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:FuelPHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事