2

我有两个功能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在提取数据后直接查看文件,它就可以工作。任何人都可以告诉我为什么会发生这种情况或任何解决方案?

4

1 回答 1

0

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

我鼓励您为视图使用模板引擎,而不是为此找到解决方案,例如Twig。这是 MVC 框架中的标准做法。然后,您可以执行以下操作:

public function render($view,$data = array()){
    $template = $twig->loadTemplate($view);
    echo $template->render($data);
}
于 2013-02-20T09:01:45.283 回答