2013.
06.
01
20:44:00
FuelPHPではviewの入れ子、つまりviewからviewを読み込めるのだそうな。
そこら辺をちょいと見ていこうかな、というのが今回のテーマです。
まずはシンプルなviewの入れ子φ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
結果φ(--)
ふむ、普通ですな。
じゃあ次に、コントローラから変数は渡せるのかな?φ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
結果φ(--)
「変数に値設定しろ、ばーか」って怒られた(--;
調べてみたら入れ子のviewに値を渡したいときには
「set()」ではなく「set_global()」を使うらしいφ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
結果φ(--)
おぉ、ちゃんと「hogehoge」が表示された。
呼出元viewからなら普通に設定できるかな?と思いやってみるとφ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
結果φ(--)
あぁ、やっぱりできましたか。
ちなみに、こんなこともできるみたいですφ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
コントローラで親ビュー「$view」の変数「view2」に「変数『msg』に値を設定した子ビュー」を突っ込み
親ビュー「template_hoge.php」の中では$viewをechoしてるだけです。
結果φ(--)
なんだかんだで動くのですね。
つまり
ってことですかね。
viewの入れ子ができるのは助かる(と言うかできないと話にならない)けど
「set_global()」が個人的にはちょっとイヤかなーって感じです。
これって要はグローバル変数化するってことですもんね。
あっ、そうそう。
何が違うのかよく分からんけど「render()」を使って
こんな書き方もできるらしいですφ(--)
■fuel/app/classes/controller/hoge.php
■fuel/app/views/template_hoge.php
■fuel/app/views/template_hoge2.php
「render()」つけなくても結果同じじゃん。とか言ったら怒られるのでしょうね。
サニタイズするとかしないとかそこら辺の違いですかね(--?
よく分からんけど。
まぁ取りあえずviewの入れ子の理解、完了\(--)/
そこら辺をちょいと見ていこうかな、というのが今回のテーマです。
まずはシンプルなviewの入れ子φ(--)
■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
$view = View::forge('hoge/template_hoge');
return $view;
}
{
$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>
<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
template_hoge2
ふむ、普通ですな。
じゃあ次に、コントローラから変数は渡せるのかな?φ(--)
■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
$view = View::forge('template_hoge');
$view->set('msg', "hogehoge");
return $view;
}
{
$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>
<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 ?>
<?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 ?>
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;
}
{
$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>
<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 ?>
<?php echo $msg ?>
結果φ(--)
template_hoge
template_hoge2
hogehoge
template_hoge2
hogehoge
おぉ、ちゃんと「hogehoge」が表示された。
呼出元viewからなら普通に設定できるかな?と思いやってみるとφ(--)
■fuel/app/classes/controller/hoge.php
public function action_view_test2()
{
$view = View::forge('template_hoge');
return $view;
}
{
$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>
<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 ?>
<?php echo $msg ?>
結果φ(--)
template_hoge
template_hoge2
hogehoge2
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;
}
{
$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>
<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 ?>
<?php echo $msg ?>
コントローラで親ビュー「$view」の変数「view2」に「変数『msg』に値を設定した子ビュー」を突っ込み
親ビュー「template_hoge.php」の中では$viewをechoしてるだけです。
結果φ(--)
template_hoge
template_hoge2
hogehoge
template_hoge2
hogehoge
なんだかんだで動くのですね。
つまり
1.view内で「View::forge()」を使えば
(もしくはviewを丸ごと変数として渡せば)viewの入れ子が可能
2.直接呼び出したviewに値を渡すときは「set()」でOK
3.直接呼び出していないviewに値を渡すときは「set_global()」を使う
(もしくは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();
}
{
$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>
<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 ?>
<?php echo $msg ?>
「render()」つけなくても結果同じじゃん。とか言ったら怒られるのでしょうね。
サニタイズするとかしないとかそこら辺の違いですかね(--?
よく分からんけど。
まぁ取りあえずviewの入れ子の理解、完了\(--)/