HandleFormController.php 1.3 KB

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