Skip to content

Commit 66a2a69

Browse files
CAFernandesclaude
andcommitted
fix: Corrige CycleMiddleware para criar e passar CycleRequest wrapper
- Middleware agora cria uma instância de CycleRequest envolvendo o Request original - Injeta os serviços ORM diretamente no CycleRequest - Remove método addCycleHelpers desnecessário - Garante que handlers recebam CycleRequest com todos os helpers disponíveis Isso corrige o problema onde os helpers do ORM não estariam acessíveis porque o middleware estava passando o Request original em vez do CycleRequest wrapper. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent bf03acc commit 66a2a69

File tree

1 file changed

+10
-81
lines changed

1 file changed

+10
-81
lines changed

src/Middleware/CycleMiddleware.php

Lines changed: 10 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace CAFernandes\ExpressPHP\CycleORM\Middleware;
44

55
use CAFernandes\ExpressPHP\CycleORM\Http\CycleRequest;
6-
use CAFernandes\ExpressPHP\CycleORM\RepositoryFactory;
76
use Cycle\Database\DatabaseInterface;
87
use Cycle\ORM\EntityManagerInterface;
98
use Cycle\ORM\ORMInterface;
@@ -45,100 +44,30 @@ public function handle(Request $req, Response $res, callable $next): void
4544
throw new \RuntimeException('Cycle ORM not properly registered');
4645
}
4746

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
4951
$orm = $container->get('cycle.orm');
5052
$em = $container->get('cycle.em');
5153
$db = $container->get('cycle.database');
5254
$repository = $container->get('cycle.repository');
5355

56+
// Injeta os serviços diretamente no CycleRequest
5457
if ($orm instanceof ORMInterface) {
55-
$req->setAttribute('orm', $orm);
56-
$req->setAttribute('cycle.orm', $orm); // Alias para compatibilidade
58+
$cycleRequest->orm = $orm;
5759
}
5860

5961
if ($em instanceof EntityManagerInterface) {
60-
$req->setAttribute('em', $em);
61-
$req->setAttribute('cycle.em', $em); // Alias para compatibilidade
62+
$cycleRequest->em = $em;
6263
}
6364

6465
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;
8067
}
8168

82-
$next($req, $res);
69+
// Passa o CycleRequest wrapper para o próximo handler
70+
$next($cycleRequest, $res);
8371
}
8472

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-
}
14473
}

0 commit comments

Comments
 (0)