2016-08-09 5 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($コメント); – DomainFlag

+0

匿名関数のようなものです。この種のものを初めて使用しています。 – DomainFlag

答えて

2

あなたは、PHPではなく、あなたのGenerateComments方法のCommentsクラス内のメソッドとしてtreeになります意味$thisを使用して機能treeを呼び出しています。この

$array = tree($Comments); 

に注意することが

変更

$array = $this->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 version – DomainFlag

1

あなたtree機能はコントローラGenerateComments関数内です。

これは、クラスメソッドとして使用すると思われます。

+0

はい、クラスメソッド – DomainFlag

1

同様call_user_funcでこのように関数を呼び出してみてください。

$array = call_user_func('tree', $Comments); 
関連する問題