|
3 | 3 | namespace CAFernandes\ExpressPHP\CycleORM\Middleware; |
4 | 4 |
|
5 | 5 | use CAFernandes\ExpressPHP\CycleORM\Http\CycleRequest; |
6 | | -use CAFernandes\ExpressPHP\CycleORM\RepositoryFactory; |
7 | 6 | use Cycle\Database\DatabaseInterface; |
8 | 7 | use Cycle\ORM\EntityManagerInterface; |
9 | 8 | use Cycle\ORM\ORMInterface; |
@@ -45,100 +44,30 @@ public function handle(Request $req, Response $res, callable $next): void |
45 | 44 | throw new \RuntimeException('Cycle ORM not properly registered'); |
46 | 45 | } |
47 | 46 |
|
48 | | - // Adiciona os serviços do Cycle ORM como atributos dinâmicos no request |
| 47 | + // Cria o CycleRequest wrapper |
| 48 | + $cycleRequest = new CycleRequest($req); |
| 49 | + |
| 50 | + // Obtém os serviços do Cycle ORM do container |
49 | 51 | $orm = $container->get('cycle.orm'); |
50 | 52 | $em = $container->get('cycle.em'); |
51 | 53 | $db = $container->get('cycle.database'); |
52 | 54 | $repository = $container->get('cycle.repository'); |
53 | 55 |
|
| 56 | + // Injeta os serviços diretamente no CycleRequest |
54 | 57 | if ($orm instanceof ORMInterface) { |
55 | | - $req->setAttribute('orm', $orm); |
56 | | - $req->setAttribute('cycle.orm', $orm); // Alias para compatibilidade |
| 58 | + $cycleRequest->orm = $orm; |
57 | 59 | } |
58 | 60 |
|
59 | 61 | if ($em instanceof EntityManagerInterface) { |
60 | | - $req->setAttribute('em', $em); |
61 | | - $req->setAttribute('cycle.em', $em); // Alias para compatibilidade |
| 62 | + $cycleRequest->em = $em; |
62 | 63 | } |
63 | 64 |
|
64 | 65 | if ($db instanceof DatabaseInterface) { |
65 | | - $req->setAttribute('db', $db); |
66 | | - $req->setAttribute('cycle.database', $db); // Alias para compatibilidade |
67 | | - } |
68 | | - |
69 | | - // Adiciona o repository factory |
70 | | - $req->setAttribute('repository', $repository); |
71 | | - $req->setAttribute('cycle.repository', $repository); // Alias para compatibilidade |
72 | | - |
73 | | - // Adiciona métodos helper do Cycle ORM |
74 | | - if ( |
75 | | - $orm instanceof ORMInterface |
76 | | - && $em instanceof EntityManagerInterface |
77 | | - && $repository instanceof RepositoryFactory |
78 | | - ) { |
79 | | - $this->addCycleHelpers($req, $orm, $em, $repository); |
| 66 | + $cycleRequest->db = $db; |
80 | 67 | } |
81 | 68 |
|
82 | | - $next($req, $res); |
| 69 | + // Passa o CycleRequest wrapper para o próximo handler |
| 70 | + $next($cycleRequest, $res); |
83 | 71 | } |
84 | 72 |
|
85 | | - /** |
86 | | - * Adiciona métodos helper do Cycle ORM como closures no request. |
87 | | - */ |
88 | | - private function addCycleHelpers( |
89 | | - Request $req, |
90 | | - ORMInterface $orm, |
91 | | - EntityManagerInterface $em, |
92 | | - RepositoryFactory $repository |
93 | | - ): void { |
94 | | - // Helper para obter repository de uma entidade |
95 | | - $req->setAttribute( |
96 | | - 'getRepository', |
97 | | - function (string $entityClass) use ($repository) { |
98 | | - /** @var class-string $entityClass */ |
99 | | - return $repository->getRepository($entityClass); |
100 | | - } |
101 | | - ); |
102 | | - |
103 | | - // Helper para criar entidade a partir de dados |
104 | | - $req->setAttribute( |
105 | | - 'createEntity', |
106 | | - function (string $entityClass, array $data) { |
107 | | - $entity = new $entityClass(); |
108 | | - foreach ($data as $key => $value) { |
109 | | - if (property_exists($entity, $key)) { |
110 | | - $entity->$key = $value; |
111 | | - } |
112 | | - } |
113 | | - return $entity; |
114 | | - } |
115 | | - ); |
116 | | - |
117 | | - // Helper para buscar entidade por ID |
118 | | - $req->setAttribute( |
119 | | - 'findEntity', |
120 | | - function (string $entityClass, $id) use ($repository) { |
121 | | - /** @var class-string $entityClass */ |
122 | | - return $repository->getRepository($entityClass)->findByPK($id); |
123 | | - } |
124 | | - ); |
125 | | - |
126 | | - // Helper para persistir entidade |
127 | | - $req->setAttribute( |
128 | | - 'persistEntity', |
129 | | - function ($entity) use ($em) { |
130 | | - $em->persist($entity); |
131 | | - return $entity; |
132 | | - } |
133 | | - ); |
134 | | - |
135 | | - // Helper para remover entidade |
136 | | - $req->setAttribute( |
137 | | - 'removeEntity', |
138 | | - function ($entity) use ($em) { |
139 | | - $em->delete($entity); |
140 | | - return $entity; |
141 | | - } |
142 | | - ); |
143 | | - } |
144 | 73 | } |
0 commit comments