我的视图类中有两个函数loadView()
和render()
。
public function loadView($view){
if(file_exists(APP.'view/'.$view)){
require(APP.'view/'.$view);
}
else{
die(APP.'view/'.$view.' not found.');
}
}
public function render($view,$data = array()){
if(!empty($data)){
extract($data);
ob_start();
//$this->loadView($view); -------------- not woriking
require(APP.'view/'.$view); ------ working
$this->output = ob_get_clean();
echo $this->output;
}
}
每当我从loadview
调用render
函数时,它就无效了。但是如果我在提取数据后直接include
视图文件,它就可以工作。任何人都可以告诉我为什么会发生这种情况或任何解决方案?
答案 0 :(得分:0)
这不起作用,因为require()
在require()
语句的位置以及该位置的范围内包含所需的代码。在这种情况下,范围是loadView()
方法。在该方法范围内,render()
方法中提取的变量不可用。
我鼓励您为Twig之类的观点使用模板引擎,而不是找到解决方案。这是MVC框架中的标准做法。然后,你可以这样做:
public function render($view,$data = array()){
$template = $twig->loadTemplate($view);
echo $template->render($data);
}