fetchAll(); usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) { return strcmp($a->descripcion, $b->descripcion); }); } catch (EmptyResult) {} return $view->render($response, 'proyectos.list', compact('proyectos')); } public function unidades(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Redis $redisService, Repository\Proyecto $proyectoRepository, Repository\Venta\Unidad $unidadRepository): ResponseInterface { $proyectos = []; $redisKey = "proyectos:con_unidades"; try { $proyectos = $this->fetchRedis($redisService, $redisKey); } catch (EmptyRedis) { try { $proyectos = $proyectoRepository->fetchAll(); $proyectos = array_filter($proyectos, function(Model\Proyecto $proyecto) use ($unidadRepository) { $unidades = $unidadRepository->fetchByProyecto($proyecto->id); return count($unidades) > 0; }); usort($proyectos, function(Model\Proyecto $a, Model\Proyecto $b) { return strcmp($a->descripcion, $b->descripcion); }); $this->saveRedis($redisService, $redisKey, $proyectos); } catch (EmptyResult) {} } return $view->render($response, 'proyectos.unidades', compact('proyectos')); } public function show(ServerRequestInterface $request, ResponseInterface $response, View $view, Service\Redis $redisService, Service\Proyecto $proyectoService, Repository\Proyecto $proyectoRepository, int $proyecto_id): ResponseInterface { $redisKey = "proyecto:{$proyecto_id}"; try { $proyecto = $proyectoService->getById($this->fetchRedis($redisService, $redisKey)->id); } catch (EmptyRedis) { $proyecto = $proyectoService->getById($proyecto_id); $this->saveRedis($redisService, $redisKey, $proyecto); } return $view->render($response, 'proyectos.show', compact('proyecto')); } }