ArticleController.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\Article;
  5. class ArticleController extends Controller
  6. {
  7. function published() {
  8. return view("published", ["rows" => Article::published()->get()]);
  9. }
  10. function index() {
  11. $all = Article::all()->groupBy("status");
  12. $args = [
  13. "drafts" => $all[Article::STATUS_DRAFT] ?? null,
  14. "pending" => $all[Article::STATUS_PENDING] ?? null,
  15. "published" => $all[Article::STATUS_PUBLISHED] ?? null,
  16. "archive" => $all[Article::STATUS_ARCHIVE] ?? null
  17. ];
  18. return view("articles", $args);
  19. }
  20. function add() {
  21. return view("add_article_form");
  22. }
  23. function view(Article $article) {
  24. return view("article", [
  25. "article" => $article
  26. ]);
  27. }
  28. function edit(Article $article) {
  29. return view("edit_article_form", ["article" => $article]);
  30. }
  31. function store(Request $request) {
  32. $request->validate([
  33. "id" => "nullable|exists:articles",
  34. "title" => "required",
  35. "description" => "nullable",
  36. "content" => "required",
  37. "status" => "required",
  38. "publish_at" => "nullable",
  39. "unpublish_at" => "nullable"
  40. ], [
  41. "name" => "Публикация должна иметь название.",
  42. "content" => "Публикация должна иметь текст."
  43. ]);
  44. $arr = $request;
  45. $article = Article::find($arr->id) ?? new Article;
  46. $article->title = $arr->title;
  47. $article->description = $arr->description ?? explode(".", $arr->content)[0];
  48. $article->content = $arr->content;
  49. $article->status = $arr->status;
  50. $article->publish_at = $arr->publish_at;
  51. $article->unpublish_at = $arr->unpublish_at;
  52. $article->save();
  53. return view("success");
  54. }
  55. function drop(Article $article) {
  56. $article->delete();
  57. return view("success");
  58. }
  59. }