FrontendMenuController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2017-03-15 21:16
  7. */
  8. namespace backend\controllers;
  9. use Yii;
  10. use common\services\CategoryServiceInterface;
  11. use backend\actions\ViewAction;
  12. use common\services\MenuServiceInterface;
  13. use common\models\Menu;
  14. use backend\actions\CreateAction;
  15. use backend\actions\UpdateAction;
  16. use backend\actions\IndexAction;
  17. use backend\actions\DeleteAction;
  18. use backend\actions\SortAction;
  19. use yii\helpers\ArrayHelper;
  20. /**
  21. * Frontend menu management
  22. * - data:
  23. * table menu
  24. * column `type` value is \common\models\Menu::TYPE_FRONTEND records
  25. * - description:
  26. * frontend menu management
  27. *
  28. * Class AdController
  29. * @package backend\controllers
  30. */
  31. class FrontendMenuController extends \yii\web\Controller
  32. {
  33. /**
  34. * @auth
  35. * - item group=菜单 category=前台 description-get=列表 sort=200 method=get
  36. * - item group=菜单 category=前台 description-get=查看 sort=201 method=get


  37. * - item group=菜单 category=前台 description=创建 sort-get=202 sort-post=203 method=get,post


  38. * - item group=菜单 category=前台 description=修改 sort-get=204 sort-post=205 method=get,post


  39. * - item group=菜单 category=前台 description-post=删除 sort=206 method=post


  40. * - item group=菜单 category=前台 description-post=排序 sort=207 method=post


  41. *
  42. * @return array
  43. * @throws \yii\base\InvalidConfigException
  44. */
  45. public function actions()
  46. {
  47. /** @var MenuServiceInterface $service */
  48. $service = Yii::$app->get(MenuServiceInterface::ServiceName);
  49. /** @var CategoryServiceInterface $categoryService */
  50. $categoryService = Yii::$app->get(CategoryServiceInterface::ServiceName);
  51. return [
  52. 'index' => [
  53. 'class' => IndexAction::className(),
  54. 'data' => function(array $query) use($service){
  55. $result = $service->getList($query, ['type'=> Menu::TYPE_FRONTEND]);
  56. $data = [
  57. 'dataProvider' => $result['dataProvider'],
  58. 'searchModel' => $result['searchModel'],
  59. ];
  60. return $data;
  61. },
  62. ],
  63. 'view-layer' => [
  64. 'class' => ViewAction::className(),
  65. 'data' => function($id)use($service){
  66. return [
  67. 'model'=>$service->getDetail($id)
  68. ];
  69. },
  70. ],
  71. 'create' => [
  72. 'class' => CreateAction::className(),
  73. 'doCreate' => function($postData)use($service){
  74. return $service->create($postData, ['type'=> Menu::TYPE_FRONTEND]);
  75. },
  76. 'data' => function($createResultModel) use($service, $categoryService){
  77. $model = $createResultModel === null ? $service->newModel(['type'=> Menu::TYPE_FRONTEND]) : $createResultModel;
  78. return [
  79. 'model' => $model,
  80. 'menusNameWithPrefixLevelCharacters' => ArrayHelper::getColumn($service->getLevelMenusWithPrefixLevelCharacters(Menu::TYPE_FRONTEND), "prefix_level_name"),
  81. 'parentMenuDisabledOptions' => [],
  82. 'categoryUrls' => $categoryService->getCategoriesRelativeUrl()
  83. ];
  84. },
  85. ],
  86. 'update' => [
  87. 'class' => UpdateAction::className(),
  88. 'doUpdate' => function($id, $postData)use($service) {
  89. return $service->update($id, $postData);
  90. },
  91. 'data' => function($id, $updateResultModel)use($service, $categoryService){
  92. $model = $updateResultModel === null ? $service->getDetail($id) : $updateResultModel;
  93. $parentMenuDisabledOptions = [];
  94. $parentMenuDisabledOptions[$id] = ['disabled' => true];//cannot be themselves' sub menu
  95. $descendants = $model->getDescendants($id, Menu::TYPE_BACKEND);
  96. $descendants = ArrayHelper::getColumn($descendants, 'id');
  97. foreach ($descendants as $descendant){//cannot be themselves's sub menu's menu
  98. $parentMenuDisabledOptions[$descendant] = ['disabled' => true];
  99. }
  100. return [
  101. 'model' => $model,
  102. 'menusNameWithPrefixLevelCharacters' => ArrayHelper::getColumn($service->getLevelMenusWithPrefixLevelCharacters(Menu::TYPE_FRONTEND), "prefix_level_name"),
  103. 'parentMenuDisabledOptions' => $parentMenuDisabledOptions,
  104. 'categoryUrls' => $categoryService->getCategoriesRelativeUrl()
  105. ];
  106. },
  107. ],
  108. 'delete' => [
  109. 'class' => DeleteAction::className(),
  110. 'doDelete' => function($id)use($service){
  111. return $service->delete($id);
  112. },
  113. ],
  114. 'sort' => [
  115. 'class' => SortAction::className(),
  116. 'doSort' => function($id, $sort)use($service){
  117. return $service->sort($id, $sort);
  118. },
  119. ],
  120. ];
  121. }
  122. }