FormController.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\File;
  5. use Carbon\Carbon;
  6. class FormController extends Controller
  7. {
  8. private $path;
  9. public function __construct()
  10. {
  11. $this->path = storage_path('app/forms/contacts.json');
  12. }
  13. public function index()
  14. {
  15. return view('form');
  16. }
  17. public function submit(Request $request)
  18. {
  19. $validated = $request->validate([
  20. 'name' => 'required|string|min:3|max:15',
  21. 'email' => 'required|email|max:50',
  22. 'message' => 'required|string|min:10|max:100'
  23. ]);
  24. File::ensureDirectoryExists(dirname($this->path));
  25. $data = [];
  26. if (File::exists($this->path)) {
  27. $content = File::get($this->path);
  28. $data = json_decode($content, true) ?: [];
  29. }
  30. $validated['created_at'] = now()->toDateTimeString();
  31. $data[] = $validated;
  32. File::put($this->path, json_encode($data, JSON_UNESCAPED_UNICODE));
  33. return redirect()->back()->with('success', 'Данные сохранены!');
  34. }
  35. public function showData()
  36. {
  37. $data = [];
  38. if (File::exists($this->path)) {
  39. $content = File::get($this->path);
  40. $data = json_decode($content, true) ?: [];
  41. }
  42. $submissions = collect($data)->map(function ($item) {
  43. return (object) [
  44. 'name' => $item['name'],
  45. 'email' => $item['email'],
  46. 'message' => $item['message'],
  47. 'created_at' => Carbon::parse($item['created_at'])
  48. ];
  49. }) -> sortBy('createdAt');
  50. return view('admin', compact('submissions'));
  51. }
  52. }