フレームワーク眺めていると、時々見かけるextract()。 慎重に使えば結構便利なのかも?
ビューファイルからコントローラーの値を参照しやすくextract()を使ってみる。
// サニタイズ用
// グローバル関数
function s($value)
{
return htmlentities($value, ENT_QUOTES, mb_internal_encoding());
}
class Controller
{
private $data = null;
private $clean = null;
private $viewfile = "test.php";
public function __construct()
{
$this->data = $_POST;
$this->validate();
}
public function display()
{
extract($this->clean);
require_once($this->view_file);
}
private function validate()
{
/**
* $this->dataをバリデート
*
* バリデートOKのdataをcleanにセット
* viewでforeach等でまわす場合、
* keyもちゃんとバリデートしないと危ない。
*/
$this->setClean($data);
}
private function setClean($data)
{
$this->clean = $data;
}
}
// test.php <? echo s($User["name"]) . "<br />"; echo s($User["mail"]) . "<br />"; ?>
// クライアントコード
<?
require_once("sanitize.php");
require_once("Controller.php");
$c = new Controller();
$c->display();
?>
<form>
<input type="text" name="data[User][name]" value="test" />
<input type="text" name="data[User][mail]" value="test@example.com" />
<input type="submit" value="送信" />
</form>
ビューファイルで$User["name"]と短くかけるのはいいですが、 $Userの出所がわかりずらいので
public function display()
{
$clean = $this->clean;
require_once($this->view_file);
}
// test.php <? echo s($clean["User"]["name"]) . "<br />"; echo s($clean["User"]["mail"]) . "<br />"; ?>
と書くのがやっぱり正解なのかも。 フレームワーク制作時以外、あまり使うことなさそう?
/ 金額 : ¥ 3,570
1-5
6-10