Utils.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace Mpociot\ApiDoc\Tools;
  3. use Illuminate\Support\Str;
  4. use Illuminate\Routing\Route;
  5. use League\Flysystem\Filesystem;
  6. use League\Flysystem\Adapter\Local;
  7. class Utils
  8. {
  9. public static function getFullUrl(Route $route, array $bindings = []): string
  10. {
  11. $uri = $route->uri();
  12. return self::replaceUrlParameterBindings($uri, $bindings);
  13. }
  14. /**
  15. * @param array $action
  16. *
  17. * @return array|null
  18. */
  19. public static function getRouteActionUses(array $action)
  20. {
  21. if ($action['uses'] !== null) {
  22. if (is_array($action['uses'])) {
  23. return $action['uses'];
  24. } elseif (is_string($action['uses'])) {
  25. return explode('@', $action['uses']);
  26. }
  27. }
  28. if (array_key_exists(0, $action) && array_key_exists(1, $action)) {
  29. return [
  30. 0 => $action[0],
  31. 1 => $action[1],
  32. ];
  33. }
  34. }
  35. /**
  36. * Transform parameters in URLs into real values (/users/{user} -> /users/2).
  37. * Uses bindings specified by caller, otherwise just uses '1'.
  38. *
  39. * @param string $uri
  40. * @param array $bindings
  41. *
  42. * @return mixed
  43. */
  44. public static function replaceUrlParameterBindings(string $uri, array $bindings)
  45. {
  46. foreach ($bindings as $path => $binding) {
  47. // So we can support partial bindings like
  48. // 'bindings' => [
  49. // 'foo/{type}' => 4,
  50. // 'bar/{type}' => 2
  51. //],
  52. if (Str::is("*$path*", $uri)) {
  53. preg_match('/({.+?})/', $path, $parameter);
  54. $uri = str_replace("{$parameter['1']}", $binding, $uri);
  55. }
  56. }
  57. // Replace any unbound parameters with '1'
  58. $uri = preg_replace('/{(.+?)}/', 1, $uri);
  59. return $uri;
  60. }
  61. public function dumpException(\Exception $e)
  62. {
  63. if (class_exists(\NunoMaduro\Collision\Handler::class)) {
  64. $handler = new \NunoMaduro\Collision\Handler;
  65. $handler->setInspector(new \Whoops\Exception\Inspector($e));
  66. $handler->setException($e);
  67. $handler->handle();
  68. } else {
  69. dump($e);
  70. echo "You can get better exception output by installing the library \nunomaduro/collision (PHP 7.1+ only).\n";
  71. }
  72. }
  73. public static function deleteDirectoryAndContents($dir)
  74. {
  75. $adapter = new Local(realpath(__DIR__.'/../../'));
  76. $fs = new Filesystem($adapter);
  77. $fs->deleteDir($dir);
  78. }
  79. }