2013-02-20 77 views
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; 
     } 
    } 

每当我打电话从render它不工作的loadview功能。但如果我在提取数据后直接查看文件include,它就可以工作。任何人都可以告诉我这是为什么发生在这里或任何解决方案?

+0

注:'require'是一个语言结构(不是函数),并且不需要括号 – orourkek 2013-02-20 17:12:24

回答

0

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

而不是找到一个解决方案,我会鼓励你使用你的意见的模板引擎,如Twig。这是MVC框架中的标准做法。然后,你可以做这样的事情:

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

我不会说,树枝是“标准做法”为MVC框架。 Twig是许多模板引擎之一,它是表示层的一个组件的一个选项 – orourkek 2013-02-20 17:14:07

+0

我的观点正是你的:模板引擎是许多框架中的标准实践。因此在我的陈述中有'like'这个词。 – 2013-02-20 20:21:37