2013-02-20 76 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