PostController.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Carbon\Carbon;
  5. use App\Models\Post;
  6. class PostController extends Controller
  7. {
  8. public function index(){
  9. return view('posts.index', ['posts' => Post::latest()->get()]);
  10. }
  11. public function create(){
  12. return view('posts.edit');
  13. }
  14. public function show(Post $post){
  15. return view('posts.show', compact('post'));
  16. }
  17. public function edit(Post $post){
  18. return view('posts.edit', compact('post'));
  19. }
  20. public function update(Request $request, Post $post){
  21. $validated = $request->validate([
  22. 'title' => 'required|string|max:255',
  23. 'content' => 'required|string',
  24. 'published_at' => 'nullable|date',
  25. ]);
  26. if ($request->filled('published_at')) {
  27. $validated['published_at'] = Carbon::parse($request->published_at, $request->timezone)
  28. ->setTimezone('UTC');
  29. }
  30. $wasPublished = $post->is_published;
  31. $post->fill($validated);
  32. $post->is_published = $request->has('is_published');
  33. $post->save();
  34. if (!$wasPublished && $post->is_published) {
  35. if (!$post->published_at) {
  36. $post->update(['published_at' => now()]);
  37. }
  38. }
  39. return redirect()
  40. ->route('posts.index')
  41. ->with('success', 'Пост успешно обновлен!');
  42. }
  43. public function store(Request $request){
  44. $data = $request->validate([
  45. 'title' => 'required',
  46. 'content' => 'required',
  47. 'published_at' => 'nullable|date'
  48. ]);
  49. if ($request->filled('published_at')) {
  50. $data['published_at'] = Carbon::parse($request->published_at, $request->timezone)
  51. ->setTimezone('UTC');
  52. }
  53. Post::create($data);
  54. return redirect()->route('posts.index')->with('success', 'Готово!');
  55. }
  56. public function togglePublish($id){
  57. $post = Post::findOrFail($id);
  58. $post->is_published = !$post->is_published;
  59. if ($post->is_published){
  60. $post->published_at = now();
  61. }
  62. $post->save();
  63. return back();
  64. }
  65. }