HandleFormController.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace Dcat\Admin\Controllers;
  3. use Dcat\Admin\Widgets\Form;
  4. use Exception;
  5. use Illuminate\Http\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. class HandleFormController
  8. {
  9. /**
  10. * @param Request $request
  11. *
  12. * @return Response
  13. */
  14. public function handle(Request $request)
  15. {
  16. $form = $this->resolveForm($request);
  17. if ($errors = $form->validate($request)) {
  18. return $form->validationErrorsResponse($errors);
  19. }
  20. $input = $form->sanitize($request->all());
  21. return $form->handle($input) ?: $form->success();
  22. }
  23. /**
  24. * @param Request $request
  25. *
  26. * @throws Exception
  27. *
  28. * @return Form
  29. */
  30. protected function resolveForm(Request $request)
  31. {
  32. if (! $request->has('_form_')) {
  33. throw new Exception('Invalid form request.');
  34. }
  35. $formClass = $request->get('_form_');
  36. if (! class_exists($formClass)) {
  37. throw new Exception("Form [{$formClass}] does not exist.");
  38. }
  39. /** @var Form $form */
  40. $form = app($formClass);
  41. if (! method_exists($form, 'handle')) {
  42. throw new Exception("Form method {$formClass}::handle() does not exist.");
  43. }
  44. return $form;
  45. }
  46. }