Laravel,Method [...]不存在

时间:2016-08-09 21:06:17

标签: php 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;
}

有什么想法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

您正在使用tree调用您的函数$this,这意味着PHP会将tree视为Comments类中的方法,而不是GenerateComments方法。< / p>

更改

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

到此

$array = tree($Comments);

注意:您在调用函数后也定义了函数。 PHP将在命名空间中看起来tree,因此它不会起作用。而是在调用之前定义您的函数。像这样

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

$array = tree($Comments);

不推荐在函数内定义函数。相反,只需在控制器中创建tree函数a method,然后使用它。像这样

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

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

答案 1 :(得分:1)

您的tree函数位于控制器GenerateComments函数内。

似乎您想将它用作类方法。

答案 2 :(得分:1)

尝试以call_user_func方式调用此函数:

$array = call_user_func('tree', $Comments);
相关问题