ValueController.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace Dcat\Admin\Controllers;
  3. use Exception;
  4. use Illuminate\Http\Request;
  5. class ValueController
  6. {
  7. /**
  8. * @param Request $request
  9. *
  10. * @return mixed
  11. */
  12. public function handle(Request $request)
  13. {
  14. $instance = $this->resolve($request);
  15. if (! $instance->passesAuthorization()) {
  16. return $instance->failedAuthorization();
  17. }
  18. $response = $instance->handle($request);
  19. if ($response) {
  20. return $response;
  21. }
  22. if (method_exists($instance, 'result')) {
  23. return $instance->result();
  24. }
  25. }
  26. /**
  27. * @param Request $request
  28. *
  29. * @throws Exception
  30. *
  31. * @return \Dcat\Admin\Traits\FromApi
  32. */
  33. protected function resolve(Request $request)
  34. {
  35. if (! $key = $request->get('_key')) {
  36. throw new Exception('Invalid request.');
  37. }
  38. if (! class_exists($key)) {
  39. throw new Exception("Class [{$key}] does not exist.");
  40. }
  41. $instance = app($key);
  42. if (! method_exists($instance, 'handle')) {
  43. throw new Exception("The method '{$key}::handle()' does not exist.");
  44. }
  45. return $instance;
  46. }
  47. }