EntityController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. abstract class EntityController extends Controller
  5. {
  6. protected $model;
  7. protected function getModel()
  8. {
  9. return $this->model;
  10. }
  11. protected $title;
  12. protected function getTitle()
  13. {
  14. return $this->title;
  15. }
  16. protected $routeIndex;
  17. protected $routeShow;
  18. protected $routeCreate;
  19. protected $routeEdit;
  20. protected $validationRules = [
  21. 'name' => 'required',
  22. ];
  23. protected function getValidationRules(Request $request)
  24. {
  25. return $this->validationRules;
  26. }
  27. protected $columns = [
  28. 'name' => 'text',
  29. ];
  30. protected function getColumns(Request $request)
  31. {
  32. return $this->columns;
  33. }
  34. protected function getIndexColumns(Request $request)
  35. {
  36. return $this->getColumns($request);
  37. }
  38. protected function getCreateColumns(Request $request)
  39. {
  40. return $this->getColumns($request);
  41. }
  42. protected function getShowColumns(Request $request)
  43. {
  44. return $this->getColumns($request);
  45. }
  46. protected function getEditColumns(Request $request)
  47. {
  48. return $this->getColumns($request);
  49. }
  50. protected function getEntityRoutes(Request $request) {
  51. $routes = [
  52. 'routeIndex' => $this->routeIndex,
  53. 'routeShow' => $this->routeShow,
  54. 'routeCreate' => $this->routeCreate,
  55. 'routeEdit' => $this->routeEdit,
  56. 'routeStore' => $this->routeStore,
  57. 'routeDestroy' => $this->routeDestroy
  58. ];
  59. return $routes;
  60. }
  61. /**
  62. * Display a listing of the resource.
  63. *
  64. * @return \Illuminate\Http\Response
  65. */
  66. public function index(Request $request)
  67. {
  68. $title = $this->getTitle();
  69. $model = $this->getModel();
  70. $routes = $this->getEntityRoutes($request);
  71. $entities = $model::paginate(30);
  72. $columns = $this->getIndexColumns($request);
  73. return view('entity.index', compact('model', 'entities', 'columns', 'title', 'routes'));
  74. }
  75. /**
  76. * Show the form for creating a new resource.
  77. *
  78. * @return \Illuminate\Http\Response
  79. */
  80. public function create(Request $request)
  81. {
  82. $title = $this->getTitle();
  83. $model = $this->getModel();
  84. $entity = new $model;
  85. $columns = $this->getCreateColumns($request);
  86. $routes = $this->getEntityRoutes($request);
  87. return view('entity.create', compact('entity', 'columns', 'title', 'routes'));
  88. }
  89. /**
  90. * Store a newly created resource in storage.
  91. *
  92. * @param \Illuminate\Http\Request $request
  93. * @return \Illuminate\Http\Response
  94. */
  95. public function store(Request $request)
  96. {
  97. $request->validate($this->getValidationRules($request));
  98. $data = $request->all();
  99. $model = $this->getModel();
  100. $entity = $model::create($data);
  101. return redirect(route($this->routeShow, $entity->id));
  102. }
  103. /**
  104. * Display the specified resource.
  105. *
  106. * @param int $id
  107. * @return \Illuminate\Http\Response
  108. */
  109. public function show(Request $request, $id)
  110. {
  111. $title = $this->getTitle();
  112. $model = $this->getModel();
  113. $entity = $model::find($id);
  114. $columns = $this->getShowColumns($request);
  115. $routes = $this->getEntityRoutes($request);
  116. return view('entity.show', compact('entity', 'columns', 'title', 'routes'));
  117. }
  118. /**
  119. * Show the form for editing the specified resource.
  120. *
  121. * @param int $id
  122. * @return \Illuminate\Http\Response
  123. */
  124. public function edit(Request $request, $id)
  125. {
  126. $title = $this->getTitle();
  127. $model = $this->getModel();
  128. $entity = $model::find($id);
  129. $routes = $this->getEntityRoutes($request);
  130. $columns = $this->getEditColumns($request);
  131. return view('entity.edit', compact('entity', 'columns', 'title', 'routes'));
  132. }
  133. /**
  134. * Update the specified resource in storage.
  135. *
  136. * @param \Illuminate\Http\Request $request
  137. * @param int $id
  138. * @return \Illuminate\Http\Response
  139. */
  140. public function update(Request $request, $id)
  141. {
  142. $model = $this->getModel();
  143. $entity = $model::find($id);
  144. $request->validate($this->getValidationRules($request));
  145. $entity->update($request->all());
  146. //return redirect(route($this->routeShow, $entity->id));
  147. return redirect(route($this->routeIndex));
  148. }
  149. /**
  150. * Remove the specified resource from storage.
  151. *
  152. * @param int $id
  153. * @return \Illuminate\Http\Response
  154. */
  155. public function destroy(Request $request, $id)
  156. {
  157. $model = $this->getModel();
  158. $entity = $model::find($id);
  159. $entity->delete();
  160. return redirect(route($this->routeIndex));
  161. }
  162. }