Вывод дерева категорий из базы данных с помощью рекурсии

Ребята, помогите с проблемой. Я описал рекурсивный метод, который генерирует дерево категорий в виде списка. На экране в меня возникает следующая ошибка:

введите сюда описание изображения

В контроллере происходит вызов рекурсивной функции:

 public function actionIndex()
{
    $searchModel = new CategorySearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $data = Category::find()->asArray()->all();
    $categoryMenu = Category::generateTree($data, $parent=0, $depth=0);
    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
        'categories' => Category::getAllCategories(),
        'categoryMenu' => $categoryMenu
    ]);
}

В модели Category описал рекурсивный метод для вывода категорий:

public function generateTree($data, $parent, $depth)
{
    $tree = "<ul>\n";
    for ($i=0, $ni=count($data); $i < $ni; $i++) {
        if ($data[$i]['parent_id'] == $parent) {    
            
            $tree .= "<li>\n";
            $tree .= $data[$i]['name'];
            $tree .= generateTree($data, $data[$i]['category_id'], $depth+1);
            $tree .= "</li>\n";
        }
    }
    $tree .= "</ul>\n";
    return $tree;
}

Так вывожу данные в представлении:

<?php echo $categoryMenu ?>

Ответы (1 шт):

Автор решения: Yaroslav Molchan

Вы вызываете просто функцию, а нужно обращаться к методу класса Category через $this:

public function generateTree($data, $parent, $depth)
{
    $tree = "<ul>\n";
    for ($i=0, $ni=count($data); $i < $ni; $i++) {
        if ($data[$i]['parent_id'] == $parent) {    
            
            $tree .= "<li>\n";
            $tree .= $data[$i]['name'];
            $tree .= $this->generateTree($data, $data[$i]['category_id'], $depth+1);
            $tree .= "</li>\n";
        }
    }
    $tree .= "</ul>\n";
    return $tree;
}
→ Ссылка