LaravelGenerator.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace Mpociot\ApiDoc\Generators;
  3. use Illuminate\Routing\Route;
  4. use Illuminate\Support\Facades\App;
  5. use Illuminate\Support\Facades\Request;
  6. class LaravelGenerator extends AbstractGenerator
  7. {
  8. /**
  9. * @param Route $route
  10. * @return mixed
  11. */
  12. protected function getUri(Route $route)
  13. {
  14. return $route->getUri();
  15. }
  16. /**
  17. * @param \Illuminate\Routing\Route $route
  18. * @param array $bindings
  19. *
  20. * @return array
  21. */
  22. public function processRoute(Route $route, $bindings = [])
  23. {
  24. $response = $this->getRouteResponse($route, $bindings);
  25. $routeAction = $route->getAction();
  26. $routeGroup = $this->getRouteGroup($routeAction['uses']);
  27. $routeDescription = $this->getRouteDescription($routeAction['uses']);
  28. if ($response->headers->get('Content-Type') === 'application/json') {
  29. $content = json_encode(json_decode($response->getContent()), JSON_PRETTY_PRINT);
  30. } else {
  31. $content = $response->getContent();
  32. }
  33. return $this->getParameters([
  34. 'resource' => $routeGroup,
  35. 'title' => $routeDescription['short'],
  36. 'description' => $routeDescription['long'],
  37. 'methods' => $route->getMethods(),
  38. 'uri' => $route->getUri(),
  39. 'parameters' => [],
  40. 'response' => $content,
  41. ], $routeAction);
  42. }
  43. /**
  44. * Call the given URI and return the Response.
  45. *
  46. * @param string $method
  47. * @param string $uri
  48. * @param array $parameters
  49. * @param array $cookies
  50. * @param array $files
  51. * @param array $server
  52. * @param string $content
  53. *
  54. * @return \Illuminate\Http\Response
  55. */
  56. public function callRoute($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
  57. {
  58. $kernel = App::make('Illuminate\Contracts\Http\Kernel');
  59. App::instance('middleware.disable', true);
  60. $server = [
  61. 'CONTENT_TYPE' => 'application/json',
  62. 'Accept' => 'application/json',
  63. ];
  64. $request = Request::create(
  65. $uri, $method, $parameters,
  66. $cookies, $files, $this->transformHeadersToServerVars($server), $content
  67. );
  68. $response = $kernel->handle($request);
  69. $kernel->terminate($request, $response);
  70. return $response;
  71. }
  72. }