2016-08-09 91 views
0

我有控制器:Laravel,方法[...]不存在

class Comments extends Controller 
{ 
    public function GenerateComments($id) 
    { 
     $theme = DB::table('New_Themes') 
        ->where('id', $id) 
        ->get(); 

     $Comments = NewTheme_Comment::where('id_theme', $id)->get(); 

     $array = $this->tree($Comments); 

     function tree($Comments, $parent_id = 0, $level=0, $c=0) 
     { 
      global $var; 
      global $array; 
      global $m; 

      foreach($Comments as $Comment) 
      { 
       if ($Comment['parent_id'] == $parent_id) { 

        $m++; 

        $array[$m][0]=$Comment['id']; 

        If ($level > $var) {$var++; $array[$m][1]=0;} else { 

         if ($c < 0) $array[$m][1]=$var-$level+1; else {$c--; $array[$m][1]=0;}; 
          $var=$level; 
       }; 

       tree($Comments, $Comment['id'], $level+1,$c); 
      } 
     }; 

     return $this->$array; 
    }; 

    return view('comments', ['Themes'=> $theme, 'Comments'=> $Comments, 'Array' => $array]); 
} 

問題是

方法[樹]不存在。

,但我不明白爲什麼它的出現,如果我是一個函數內調用函數(如低於)

$array = $this->tree($Comments); 

function tree($Comments, $parent_id = 0, $level=0, $c=0) 
{ 
    return $this->$array; 
} 

是否有任何想法,爲什麼這是不工作?

+0

我敢打賭'tree'不是一個方法 - '$ this'類的方法。這是一個功能 - 匿名功能。 – Chay22

+0

那麼我該怎麼做,我試過這兩個:$ array = $ this-> tree($ Comments);和$ array = tree($ Comments); – DomainFlag

+0

是一個匿名函數類,第一次我使用這種東西 – DomainFlag

回答

2

要調用的函數tree$this這意味着PHP將尋找tree作爲一種方法裏面Comments類,而不是你的GenerateComments方法。

變化

$array = $this->tree($Comments); 

對此

$array = tree($Comments); 

注:您還定義你的功能,你在呼喚後。 PHP將看起來像tree,因爲它在命名空間中,所以它將不起作用。相反,只需定義你的功能,然後再調用它。像這樣

function tree($Comments, $parent_id = 0, $level = 0, $c = 0) { 
    // ... 
} 

$array = tree($Comments); 

這也是不建議定義函數中的功能。相反,只需在控制器中使用tree函數,然後使用它。像這樣

class Comments extends Controller 
{ 
    public function GenerateComments() 
    { 
     // ... 
     $array = $this->tree($comments); 
    } 

    public function tree($tree) 
    { 
     // ... 
    } 
} 
+0

它說:調用未定義的函數App \ Http \ Controllers \ tree() – DomainFlag

+0

@DomainFlag您正在使用哪個php版本? –

+0

5.6.8 - php版本 – DomainFlag

1

您的tree功能是在控制器裏面的GenerateComments功能。

看來你想用它作爲類的方法。

+0

是的,類方法 – DomainFlag

1

嘗試調用函數與call_user_func這樣:

$array = call_user_func('tree', $Comments);