LaravelRequestContext.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace Facade\Ignition\Context;
  3. use Facade\FlareClient\Context\RequestContext;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Http\Request;
  6. use Throwable;
  7. class LaravelRequestContext extends RequestContext
  8. {
  9. /** @var \Illuminate\Http\Request */
  10. protected $request;
  11. public function __construct(Request $request)
  12. {
  13. $this->request = $request;
  14. }
  15. public function getUser(): array
  16. {
  17. try {
  18. $user = $this->request->user();
  19. if (! $user) {
  20. return [];
  21. }
  22. } catch (Throwable $e) {
  23. return [];
  24. }
  25. try {
  26. if (method_exists($user, 'toFlare')) {
  27. return $user->toFlare();
  28. }
  29. if (method_exists($user, 'toArray')) {
  30. return $user->toArray();
  31. }
  32. } catch (Throwable $e) {
  33. return [];
  34. }
  35. return [];
  36. }
  37. public function getRoute(): array
  38. {
  39. $route = $this->request->route();
  40. return [
  41. 'route' => optional($route)->getName(),
  42. 'routeParameters' => $this->getRouteParameters(),
  43. 'controllerAction' => optional($route)->getActionName(),
  44. 'middleware' => array_values(optional($route)->gatherMiddleware() ?? []),
  45. ];
  46. }
  47. protected function getRouteParameters(): array
  48. {
  49. try {
  50. return collect(optional($this->request->route())->parameters ?? [])
  51. ->map(function ($parameter) {
  52. return $parameter instanceof Model ? $parameter->withoutRelations() : $parameter;
  53. })
  54. ->map(function ($parameter) {
  55. return method_exists($parameter, 'toFlare') ? $parameter->toFlare() : $parameter;
  56. })
  57. ->toArray();
  58. } catch (Throwable $e) {
  59. return [];
  60. }
  61. }
  62. public function toArray(): array
  63. {
  64. $properties = parent::toArray();
  65. $properties['route'] = $this->getRoute();
  66. $properties['user'] = $this->getUser();
  67. return $properties;
  68. }
  69. }