get(MenuServiceInterface::ServiceName); /** @var CategoryServiceInterface $categoryService */ $categoryService = Yii::$app->get(CategoryServiceInterface::ServiceName); return [ 'index' => [ 'class' => IndexAction::className(), 'data' => function(array $query) use($service){ $result = $service->getList($query, ['type'=> Menu::TYPE_FRONTEND]); $data = [ 'dataProvider' => $result['dataProvider'], 'searchModel' => $result['searchModel'], ]; return $data; }, ], 'view-layer' => [ 'class' => ViewAction::className(), 'data' => function($id)use($service){ return [ 'model'=>$service->getDetail($id) ]; }, ], 'create' => [ 'class' => CreateAction::className(), 'doCreate' => function($postData)use($service){ return $service->create($postData, ['type'=> Menu::TYPE_FRONTEND]); }, 'data' => function($createResultModel) use($service, $categoryService){ $model = $createResultModel === null ? $service->newModel(['type'=> Menu::TYPE_FRONTEND]) : $createResultModel; return [ 'model' => $model, 'menusNameWithPrefixLevelCharacters' => ArrayHelper::getColumn($service->getLevelMenusWithPrefixLevelCharacters(Menu::TYPE_FRONTEND), "prefix_level_name"), 'parentMenuDisabledOptions' => [], 'categoryUrls' => $categoryService->getCategoriesRelativeUrl() ]; }, ], 'update' => [ 'class' => UpdateAction::className(), 'doUpdate' => function($id, $postData)use($service) { return $service->update($id, $postData); }, 'data' => function($id, $updateResultModel)use($service, $categoryService){ $model = $updateResultModel === null ? $service->getDetail($id) : $updateResultModel; $parentMenuDisabledOptions = []; $parentMenuDisabledOptions[$id] = ['disabled' => true];//cannot be themselves' sub menu $descendants = $model->getDescendants($id, Menu::TYPE_BACKEND); $descendants = ArrayHelper::getColumn($descendants, 'id'); foreach ($descendants as $descendant){//cannot be themselves's sub menu's menu $parentMenuDisabledOptions[$descendant] = ['disabled' => true]; } return [ 'model' => $model, 'menusNameWithPrefixLevelCharacters' => ArrayHelper::getColumn($service->getLevelMenusWithPrefixLevelCharacters(Menu::TYPE_FRONTEND), "prefix_level_name"), 'parentMenuDisabledOptions' => $parentMenuDisabledOptions, 'categoryUrls' => $categoryService->getCategoriesRelativeUrl() ]; }, ], 'delete' => [ 'class' => DeleteAction::className(), 'doDelete' => function($id)use($service){ return $service->delete($id); }, ], 'sort' => [ 'class' => SortAction::className(), 'doSort' => function($id, $sort)use($service){ return $service->sort($id, $sort); }, ], ]; } }