1
0

ArticleController.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. namespace App\Http\Controllers\Admin\Blog;
  3. use App\Models\Blog\Article;
  4. use App\Models\Blog\ArticleTag;
  5. use App\Models\Blog\Category;
  6. use App\Models\Blog\Tag;
  7. use Illuminate\Http\Request;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\Auth;
  10. class ArticleController extends Controller
  11. {
  12. //
  13. public function index(Request $request)
  14. {
  15. $size = 15;
  16. $history = array();
  17. $data = Article::with('category:id,cate_name')
  18. ->select('cate_id', 'id', 'is_top', 'slug', 'title', 'created_at', 'read_count');
  19. if (isset($request->slug) && !empty($request->slug)) {
  20. $data = $data->where('slug', 'like', '%'.$request->slug.'%');
  21. $history['slug'] = $request->slug;
  22. } else {$history['slug'] = '';}
  23. if (isset($request->title) && !empty($request->title)) {
  24. $data = $data->where('title', 'like', '%'.$request->title.'%');
  25. $history['title'] = $request->title;
  26. } else {$history['title'] = '';}
  27. if (isset($request->cate_id) && !empty($request->cate_id)) {
  28. $data = $data->where('cate_id', '=', $request->cate_id);
  29. $history['cate_id'] = $request->cate_id;
  30. } else {$history['cate_id'] = '';}
  31. if (isset($request->is_top) && !empty($request->is_top)) {
  32. $data = $data->where('is_top', '=', $request->is_top);
  33. $history['is_top'] = $request->is_top;
  34. } else {$history['is_top'] = '';}
  35. $data = $data->orderByDesc('created_at')->paginate($size)->toArray();
  36. $categories = Category::all()->toArray();
  37. $data['categories'] = $categories;
  38. $data['history'] = $history;
  39. return view('admin.blog.article.index', $data);
  40. }
  41. public function new(Request $request)
  42. {
  43. $categories = Category::all()->toArray();
  44. $data = $request->input();
  45. $data['categories'] = $categories;
  46. return view('admin.blog.article.new', $data);
  47. }
  48. public function store(Request $request)
  49. {
  50. $input = $request->input();
  51. $this->validate($request, [
  52. 'title' => 'required|max:150',
  53. 'slug' => 'required|max:255|unique:blog_articles',
  54. 'description' => 'required|max:150',
  55. 'keywords' => 'required|max:50',
  56. 'markdown' => 'required',
  57. 'tags' => 'required|max:100',
  58. ]);
  59. $input['cate_id'] = isset($input['cate_id']) ? $input['cate_id'] : false;
  60. if(!$input['new_category'] and !$input['cate_id']) {
  61. return redirect()->route('admin.blog.article.new')->withInput()->withErrors([
  62. 'category' => 'category or new category is required.'
  63. ]);
  64. }
  65. if ($input['new_category']) {
  66. $category = Category::firstOrCreate(['cate_name' => $input['new_category']]);
  67. $input['cate_id'] = $category->id;
  68. }
  69. $tags = explode(",", $input['tags']);
  70. $tagIds = array();
  71. foreach ($tags as $tagName) {
  72. $tag = Tag::firstOrCreate(['tag_name' => trim($tagName)]);
  73. $tagIds[] = $tag->id;
  74. }
  75. $input['user_id'] = Auth::guard('admin')->id();
  76. $article = new Article();
  77. $res = $article->checkStore($input);
  78. if ($res) {
  79. foreach ($tagIds as $tagId) {
  80. ArticleTag::firstOrCreate(['article_id' => $article->id, 'tag_id' => $tagId]);
  81. }
  82. return redirect()->route('admin.blog.article.list');
  83. }
  84. return redirect()->route('admin.blog.article.new')->withInput();
  85. }
  86. public function edit($id)
  87. {
  88. $article = Article::find($id);
  89. if (!$article) {
  90. abort(404);
  91. }
  92. $data['article'] = $article->toArray();
  93. $tagNames = ArticleTag::select('blog_tags.tag_name')->where('article_id', '=', $id)
  94. ->leftJoin('blog_tags', 'blog_article_tags.tag_id', 'blog_tags.id')->get();
  95. $data['article']['tags'] = '';
  96. foreach ($tagNames as $tagName) {
  97. if (!$data['article']['tags']) {
  98. $data['article']['tags'] = $tagName->tag_name;
  99. } else {
  100. $data['article']['tags'] = $data['article']['tags'] . ',' . $tagName->tag_name;
  101. }
  102. }
  103. $categories = Category::all()->toArray();
  104. $data['categories'] = $categories;
  105. return view('admin.blog.article.edit', $data);
  106. }
  107. public function update(Request $request)
  108. {
  109. $input = $request->input();
  110. $this->validate($request, [
  111. 'id' => 'required',
  112. 'title' => 'required|max:100',
  113. 'slug' => 'required|max:255',
  114. 'description' => 'required|max:150',
  115. 'keywords' => 'required|max:50',
  116. 'markdown' => 'required',
  117. 'tags' => 'required|max:100',
  118. ]);
  119. $article = Article::select('id', 'slug')->where('slug', '=', $input['slug'])->first();
  120. if(isset($article->id) and $article->id != $input['id']) {
  121. return redirect()->route('admin.blog.article.edit', $input['id'])->withInput()->withErrors([
  122. "slug" => "slug duplicate."
  123. ]);
  124. }
  125. $input['cate_id'] = isset($input['cate_id']) ? $input['cate_id'] : false;
  126. if(!$input['new_category'] and !$input['cate_id']) {
  127. return redirect()->route('admin.blog.article.edit', $input['id'])->withInput()->withErrors([
  128. 'category' => 'category or new category is required.'
  129. ]);
  130. }
  131. if ($input['new_category']) {
  132. $category = Category::firstOrCreate(['cate_name' => $input['new_category']]);
  133. $input['cate_id'] = $category->id;
  134. }
  135. $tags = explode(",", $input['tags']);
  136. $tagIds = array();
  137. foreach ($tags as $tagName) {
  138. $tag = Tag::firstOrCreate(['tag_name' => trim($tagName)]);
  139. $tagIds[] = $tag->id;
  140. }
  141. $input['user_id'] = Auth::guard('admin')->id();
  142. $article = new Article();
  143. $res = $article->checkUpdate($input['id'], $input);
  144. if ($res) {
  145. foreach ($tagIds as $tagId) {
  146. ArticleTag::firstOrCreate(['article_id' => $input['id'], 'tag_id' => $tagId]);
  147. }
  148. return redirect()->route('admin.blog.article.list');
  149. }
  150. return redirect()->route('admin.blog.article.edit', $input['id'])->withInput();
  151. }
  152. public function delete(Request $request)
  153. {
  154. $input = $request->input();
  155. $this->validate($request, [
  156. 'id' => 'required',
  157. ]);
  158. Article::destroy($input['id']);
  159. return back();
  160. }
  161. public function top(Request $request)
  162. {
  163. $input = $request->input();
  164. $this->validate($request, [
  165. 'id' => 'required',
  166. 'is_top' => 'required',
  167. ]);
  168. Article::where('id', '=', $input['id'])->update(['is_top' => $input['is_top']]);
  169. return back();
  170. }
  171. }