getModifiersFromRequest($request); return $this->json($repository->all(...$modifiers)); } /** * @Route("/stops", methods={"GET"}) * @Route("/{track}/stops", methods={"GET"}) */ public function stops(Request $request, TrackRepository $repository) { $modifiers = $this->getStopsModifiersFromRequest($request); return $this->json($repository->stops(...$modifiers)); } private function getModifiersFromRequest(Request $request) { if ($request->query->has('stop')) { $stop = encapsulate($request->query->get('stop')); $stop = collect($stop)->map([Stop::class, 'reference']); yield new RelatedFilter($stop, Stop::class); } if ($request->query->has('line')) { $line = encapsulate($request->query->get('line')); $line = collect($line)->map([Line::class, 'reference']); yield new RelatedFilter($line, Line::class); } if ($request->query->has('id')) { $id = encapsulate($request->query->get('id')); yield new IdFilter($id); } } private function getStopsModifiersFromRequest(Request $request) { if ($request->query->has('stop')) { $stop = encapsulate($request->query->get('stop')); $stop = collect($stop)->map(ref([Stop::class, 'reference'])); yield new RelatedFilter($stop); } if ($request->query->has('track') || $request->attributes->has('track')) { $track = $request->get('track'); $track = Track::reference($track); yield new RelatedFilter($track); } if ($request->query->has('id')) { $id = encapsulate($request->query->get('id')); yield new IdFilter($id); } } }