Вывод дерева категорий из базы данных с помощью рекурсии
Ребята, помогите с проблемой. Я описал рекурсивный метод, который генерирует дерево категорий в виде списка. На экране в меня возникает следующая ошибка:
В контроллере происходит вызов рекурсивной функции:
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;
}
