ArticleController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2016-03-23 15:13
  7. */
  8. namespace backend\controllers;
  9. use Yii;
  10. use common\services\CategoryServiceInterface;
  11. use common\models\Article;
  12. use common\services\ArticleServiceInterface;
  13. use backend\actions\CreateAction;
  14. use backend\actions\UpdateAction;
  15. use backend\actions\IndexAction;
  16. use backend\actions\ViewAction;
  17. use backend\actions\DeleteAction;
  18. use backend\actions\SortAction;
  19. use yii\helpers\ArrayHelper;
  20. /**
  21. * Article management
  22. * - data:
  23. * table article article_content
  24. * - description:
  25. * article management
  26. *
  27. * Class ArticleController
  28. * @package backend\controllers
  29. */
  30. class ArticleController extends \yii\web\Controller
  31. {
  32. /**
  33. * @auth
  34. * - item group=内容 category=文章 description-get=列表 sort=300 method=get
  35. * - item group=内容 category=文章 description-get=查看 sort=301 method=get


  36. * - item group=内容 category=文章 description=创建 sort-get=302 sort-post=303 method=get,post


  37. * - item group=内容 category=文章 description=修改 sort=304 sort-post=305 method=get,post


  38. * - item group=内容 category=文章 description-post=删除 sort=306 method=post


  39. * - item group=内容 category=文章 description-post=排序 sort=307 method=post


  40. * @return array
  41. * @throws \yii\base\InvalidConfigException
  42. */
  43. public function actions()
  44. {
  45. /** @var ArticleServiceInterface $service */
  46. $service = Yii::$app->get(ArticleServiceInterface::ServiceName);
  47. /** @var CategoryServiceInterface $categoryService */
  48. $categoryService = Yii::$app->get(CategoryServiceInterface::ServiceName);
  49. return [
  50. 'index' => [
  51. 'class' => IndexAction::className(),
  52. 'data' => function($query) use($service, $categoryService){
  53. $result = $service->getList($query, ['type'=>Article::ARTICLE]);
  54. return [
  55. 'dataProvider' => $result['dataProvider'],
  56. 'searchModel' => $result['searchModel'],
  57. 'categories' => ArrayHelper::getColumn($categoryService->getLevelCategoriesWithPrefixLevelCharacters(), "prefix_level_name"),
  58. 'frontendURLManager' => $service->getFrontendURLManager()
  59. ];
  60. }
  61. ],
  62. 'view-layer' => [
  63. 'class' => ViewAction::className(),
  64. 'data' => function($id) use($service){
  65. return [
  66. 'model' => $service->getDetail($id),
  67. ];
  68. },
  69. ],
  70. 'create' => [
  71. 'class' => CreateAction::className(),
  72. 'doCreate' => function($postData) use($service){
  73. return $service->create($postData, ['scenario'=>ArticleServiceInterface::ScenarioArticle]);
  74. },
  75. 'data' => function($createResultModel, CreateAction $createAction) use($service, $categoryService){
  76. return [
  77. 'model' => $createResultModel === null ? $service->newModel(['scenario'=>ArticleServiceInterface::ScenarioArticle]) : $createResultModel['articleModel'],
  78. 'contentModel' => $createResultModel === null ? $service->newArticleContentModel() : $createResultModel['articleContentModel'] ,
  79. 'categories' => ArrayHelper::getColumn($categoryService->getLevelCategoriesWithPrefixLevelCharacters(), "prefix_level_name"),
  80. ];
  81. },
  82. ],
  83. 'update' => [
  84. 'class' => UpdateAction::className(),
  85. 'doUpdate' => function($id, $postData) use($service){
  86. return $service->update($id, $postData, ['scenario'=>ArticleServiceInterface::ScenarioArticle]);
  87. },
  88. 'data' => function($id, $updateResultModel) use($service, $categoryService){
  89. return [
  90. 'model' => $updateResultModel === null ? $service->getDetail($id, ['scenario'=>ArticleServiceInterface::ScenarioArticle]) : $updateResultModel['articleModel'],
  91. 'contentModel' => $updateResultModel === null ? $service->getArticleContentDetail($id) : $updateResultModel['articleContentModel'],
  92. 'categories' => ArrayHelper::getColumn($categoryService->getLevelCategoriesWithPrefixLevelCharacters(), "prefix_level_name"),
  93. ];
  94. }
  95. ],
  96. 'delete' => [
  97. 'class' => DeleteAction::className(),
  98. 'doDelete' => function($id) use($service){
  99. return $service->delete($id);
  100. },
  101. ],
  102. 'sort' => [
  103. 'class' => SortAction::className(),
  104. 'doSort' => function($id, $sort) use($service){
  105. return $service->sort($id, $sort, ['scenario'=>ArticleServiceInterface::ScenarioArticle]);
  106. }
  107. ],
  108. ];
  109. }
  110. }