PostsController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Post;
  4. use Carbon\Carbon;
  5. use Illuminate\Http\Request;
  6. class PostsController extends Controller
  7. {
  8. public function __construct()
  9. {
  10. $this->middleware('auth')
  11. ->except(['index', 'show']);
  12. }
  13. /**
  14. * Show the form for creating a new resource.
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function create()
  19. {
  20. return view('posts.create');
  21. }
  22. /**
  23. * Remove the specified resource from storage.
  24. *
  25. * @param int $id
  26. *
  27. * @return \Illuminate\Http\Response
  28. */
  29. public function destroy($id)
  30. {
  31. //
  32. }
  33. /**
  34. * Show the form for editing the specified resource.
  35. *
  36. * @param int $id
  37. *
  38. * @return \Illuminate\Http\Response
  39. */
  40. public function edit($id)
  41. {
  42. //
  43. }
  44. /**
  45. * Display a listing of the resource.
  46. *
  47. * @return \Illuminate\Http\Response
  48. */
  49. public function index(Request $request)
  50. {
  51. $posts = Post::latest()
  52. ->filter($request->only(['month', 'year']))
  53. ->get();
  54. // Temporarily here: will be moved when discussing view composers.
  55. $archives = Post::selectRaw(<<<EOT
  56. year(created_at) as year,
  57. monthname(created_at) as month,
  58. count(*) published
  59. EOT
  60. )->groupBy('year', 'month')
  61. ->orderByRaw('min(created_at) desc')
  62. ->get()
  63. ->toArray();
  64. return view('posts.index', compact('archives', 'posts'));
  65. }
  66. public function show(Post $post)
  67. {
  68. return view('posts.show', compact('post'));
  69. }
  70. /**
  71. * Store a newly created resource in storage.
  72. *
  73. * - Create new post using the request data
  74. * - Save it to the database
  75. * - Redirect to the home page
  76. *
  77. * @param \Illuminate\Http\Request $request
  78. *
  79. * @return \Illuminate\Http\Response
  80. */
  81. public function store(Request $request)
  82. {
  83. // $post = new Post();
  84. // $post->title = $request->get('title');
  85. // $post->body = $request->get('body');
  86. // $post->save();
  87. $this->validate($request, [
  88. 'title' => 'required|min:10',
  89. 'body' => 'required',
  90. ]);
  91. auth()->user()->publish(new Post(request(['title', 'body'])));
  92. return redirect('/');
  93. }
  94. /**
  95. * Update the specified resource in storage.
  96. *
  97. * @param \Illuminate\Http\Request $request
  98. * @param int $id
  99. *
  100. * @return \Illuminate\Http\Response
  101. */
  102. public function update(Request $request, $id)
  103. {
  104. //
  105. }
  106. }