提取数据后包括视图

时间:2013-02-20 07:43:30

标签: php templates html-rendering

我的视图类中有两个函数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视图文件,它就可以工作。任何人都可以告诉我为什么会发生这种情况或任何解决方案?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为require()require()语句的位置以及该位置的范围内包含所需的代码。在这种情况下,范围是loadView()方法。在该方法范围内,render()方法中提取的变量不可用。

我鼓励您为Twig之类的观点使用模板引擎,而不是找到解决方案。这是MVC框架中的标准做法。然后,你可以这样做:

public function render($view,$data = array()){
    $template = $twig->loadTemplate($view);
    echo $template->render($data);
}