HandleFormController.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 (! $form->passesAuthorization()) {
  18. return $form->failedAuthorization();
  19. }
  20. if ($errors = $form->validate($request)) {
  21. return $form->validationErrorsResponse($errors);
  22. }
  23. $input = $form->sanitize($request->all());
  24. return $form->handle($input) ?: $form->success();
  25. }
  26. /**
  27. * @param Request $request
  28. *
  29. * @throws Exception
  30. *
  31. * @return Form
  32. */
  33. protected function resolveForm(Request $request)
  34. {
  35. if (! $request->has('_form_')) {
  36. throw new Exception('Invalid form request.');
  37. }
  38. $formClass = $request->get('_form_');
  39. if (! class_exists($formClass)) {
  40. throw new Exception("Form [{$formClass}] does not exist.");
  41. }
  42. /** @var Form $form */
  43. $form = app($formClass);
  44. if (! method_exists($form, 'handle')) {
  45. throw new Exception("Form method {$formClass}::handle() does not exist.");
  46. }
  47. return $form;
  48. }
  49. }