BookController.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. // php artisan make:controller BookController
  3. // app/Http/Controllers/BookController.php
  4. namespace App\Http\Controllers;
  5. use Illuminate\Http\Request;
  6. // Фасад DB здесь не используется; здесь используется модель
  7. use App\Models\Book;
  8. use App\Models\Author;
  9. class BookController extends Controller {
  10. function index() {
  11. $books = Book::all()->load("author"); // Достать все книги
  12. return view("books", ["rows" => $books]);
  13. }
  14. function add() {
  15. return view("add_book_form", ["authors" => Author::all()]);
  16. }
  17. function view(Book $book) {
  18. return view("book", ["book" => $book->load(["author", "comments"])]);
  19. }
  20. function edit(Book $book) {
  21. return view("edit_book_form", ["book" => $book]);
  22. }
  23. function store(Request $request) {
  24. $request->validate([
  25. "id" => "nullable|exists:books",
  26. "name" => "required",
  27. "annotation" => "nullable",
  28. "pagecount" => "nullable|numeric",
  29. "year" => "nullable|numeric",
  30. "isbn" => "nullable",
  31. "author" => "required|exists:authors,id"
  32. ], [
  33. "name" => "Книга должна иметь название.",
  34. "author" => "Книга должна иметь автора."
  35. ]);
  36. $arr = $request;
  37. $book = Book::find($arr->id) ?? new Book;
  38. $book->name = $arr->name;
  39. $book->annotation = $arr->annotation;
  40. $book->pagecount = $arr->pagecount;
  41. $book->year = $arr->year;
  42. $book->isbn = $arr->isbn;
  43. $book->author_id = $arr->author;
  44. $book->save();
  45. return view("success");
  46. }
  47. function comment(Book $book, Request $request) {
  48. $request->validate([
  49. "name" => "required",
  50. "email" => "required|email",
  51. "content" => "required"
  52. ], [
  53. "name" => "Укажите ваше имя.",
  54. "email" => "Укажите ваш email.",
  55. "content" => "Введите комментарий."
  56. ]);
  57. $arr = $request;
  58. $book->comments()->create([
  59. "name" => $arr->name,
  60. "email" => $arr->email,
  61. "content" => $arr->content
  62. ]);
  63. return view("success");
  64. }
  65. function drop(Book $book) {
  66. $book->delete();
  67. return view("success");
  68. }
  69. }