{"id":5889,"date":"2026-04-11T08:44:06","date_gmt":"2026-04-11T11:44:06","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5889"},"modified":"2026-04-11T08:52:12","modified_gmt":"2026-04-11T11:52:12","slug":"middleware-no-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/","title":{"rendered":"Middleware no CakePHP"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">Middleware no CakePHP: Se voc\u00ea acompanhou o artigo anterior sobre <strong>Request &amp; Response<\/strong>, entendeu como o CakePHP recebe e entrega dados. Mas e se voc\u00ea precisasse fazer algo <em>antes<\/em> mesmo do Controller ser acionado? Ou talvez modificar a resposta final <em>depois<\/em> que tudo j\u00e1 foi processado, mas antes de chegar ao navegador?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este d\u00e9cimo s\u00e9timo artigo para apresentar o conceito que d\u00e1 &#8220;superpoderes&#8221; \u00e0 sua aplica\u00e7\u00e3o: o <strong>Middleware<\/strong>. Vamos aprender a interceptar requisi\u00e7\u00f5es de forma elegante e profissional, garantindo que seu sistema seja seguro, r\u00e1pido e modular.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Middleware no CakePHP: Como interceptar requisi\u00e7\u00f5es e transformar o fluxo da sua aplica\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Middleware no CakePHP: No desenvolvimento web moderno, o conceito de <strong>Middleware<\/strong> (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware como uma s\u00e9rie de &#8220;filtros&#8221; ou &#8220;ped\u00e1gios&#8221; pelos quais a requisi\u00e7\u00e3o passa assim que entra no seu servidor. Cada filtro pode analisar a requisi\u00e7\u00e3o, modific\u00e1-la, barr\u00e1-la ou simplesmente deix\u00e1-la passar para o pr\u00f3ximo n\u00edvel at\u00e9 chegar ao cora\u00e7\u00e3o do seu c\u00f3digo: os Controllers.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dominar o <strong>Middleware no CakePHP<\/strong> permite que voc\u00ea centralize l\u00f3gicas globais \u2014 como autentica\u00e7\u00e3o, logs, compress\u00e3o de dados e seguran\u00e7a \u2014 sem sujar seus controllers com c\u00f3digos repetitivos.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. O que \u00e9 um Middleware e como ele funciona?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Middleware no CakePHP segue o padr\u00e3o PSR-15 (HTTP Middlewares). Ele funciona como uma &#8220;cebola&#8221;: a requisi\u00e7\u00e3o atravessa v\u00e1rias camadas para entrar e as mesmas camadas para sair.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Cada camada de Middleware tem a oportunidade de:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Processar a requisi\u00e7\u00e3o<\/strong> antes de pass\u00e1-la para o pr\u00f3ximo Middleware.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Interromper o fluxo<\/strong> e retornar uma resposta imediatamente (ex: se o usu\u00e1rio n\u00e3o tiver permiss\u00e3o).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Capturar a resposta<\/strong> vinda das camadas internas e modific\u00e1-la antes de envi\u00e1-la ao cliente.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. A Fila de Middleware (Middleware Queue)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No CakePHP, a ordem importa. Todos os Middlewares s\u00e3o registrados em uma fila dentro do arquivo <code>src\/Application.php<\/code>, no m\u00e9todo <code>middleware()<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O framework j\u00e1 traz v\u00e1rios Middlewares essenciais por padr\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>ErrorHandlerMiddleware:<\/strong> Captura exce\u00e7\u00f5es e exibe p\u00e1ginas de erro bonitas.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>AssetMiddleware:<\/strong> Garante que arquivos de plugins (CSS\/JS) sejam servidos corretamente.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>RoutingMiddleware:<\/strong> O &#8220;c\u00e9rebro&#8221; que l\u00ea a URL e decide qual controller chamar.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>BodyParserMiddleware:<\/strong> Transforma corpos de requisi\u00e7\u00e3o JSON ou XML em arrays f\u00e1ceis de usar no <code>$this->request->getData()<\/code>.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. Criando seu pr\u00f3prio Middleware Customizado<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Vamos criar um exemplo pr\u00e1tico: um <strong>MaintenanceMiddleware<\/strong>. Suponha que voc\u00ea queira colocar seu blog em modo de manuten\u00e7\u00e3o apenas para usu\u00e1rios que n\u00e3o tenham um IP espec\u00edfico (o seu IP de desenvolvedor em S\u00e3o Jos\u00e9 do Rio Preto).<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O arquivo deve ser criado em: <code>src\/Middleware\/MaintenanceMiddleware.php<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>namespace App\\Middleware;\n\nuse Cake\\Http\\Response;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Server\\MiddlewareInterface;\nuse Psr\\Http\\Server\\RequestHandlerInterface;\n\nclass MaintenanceMiddleware implements MiddlewareInterface\n{\n    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface\n    {\n        $emManutencao = true; \/\/ Isso viria de uma config ou banco\n        $meuIp = '127.0.0.1';\n\n        if ($emManutencao &amp;&amp; $request-&gt;getAttribute('clientIp') !== $meuIp) {\n            $response = new Response();\n            $response = $response-&gt;withStatus(503);\n            $response-&gt;getBody()-&gt;write('&lt;h1&gt;Estamos em manuten\u00e7\u00e3o!&lt;\/h1&gt;&lt;p&gt;Voltamos em breve.&lt;\/p&gt;');\n            \n            return $response; \/\/ Interrompe o fluxo aqui\n        }\n\n        \/\/ Se n\u00e3o for manuten\u00e7\u00e3o, passa para o pr\u00f3ximo Middleware na fila\n        return $handler-&gt;handle($request);\n    }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. Registrando o Middleware na Aplica\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para que o seu novo &#8220;filtro&#8221; funcione, voc\u00ea precisa avisar o CakePHP. Abra <code>src\/Application.php<\/code> e adicione-o \u00e0 fila:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue\n{\n    $middlewareQueue\n        \/\/ Outros middlewares...\n        -&gt;add(new \\App\\Middleware\\MaintenanceMiddleware())\n        -&gt;add(new RoutingMiddleware($this))\n        \/\/ ...\n        \n    return $middlewareQueue;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica de Especialista:<\/strong> Se voc\u00ea colocar seu Middleware <em>antes<\/em> do <code>RoutingMiddleware<\/code>, ele ser\u00e1 executado antes mesmo do CakePHP saber qual Controller seria chamado. Isso \u00e9 ideal para verifica\u00e7\u00f5es globais de performance e seguran\u00e7a.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. Diferen\u00e7a entre Middleware e Componente<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Muitos desenvolvedores confundem Middleware com <strong>Componentes<\/strong> (que vimos no artigo 13). A regra \u00e9 simples:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Use Middleware se:<\/strong> A l\u00f3gica for global e independente do Controller (ex: for\u00e7ar HTTPS, adicionar cabe\u00e7alhos de seguran\u00e7a CORS, log de tempo de execu\u00e7\u00e3o, compress\u00e3o Gzip).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Use Componente se:<\/strong> A l\u00f3gica for espec\u00edfica para a intera\u00e7\u00e3o do Controller com a View ou se voc\u00ea precisar acessar m\u00e9todos espec\u00edficos do Controller (ex: Auth, Flash, Paginator).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">6. Middlewares de Seguran\u00e7a: CSRF e Prote\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Um dos usos mais comuns de Middleware no CakePHP \u00e9 a prote\u00e7\u00e3o contra ataques <strong>CSRF (Cross-Site Request Forgery)<\/strong>. O CakePHP j\u00e1 oferece o <code>CsrfProtectionMiddleware<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ele funciona interceptando requisi\u00e7\u00f5es <code>POST<\/code>, <code>PUT<\/code> e <code>DELETE<\/code> e verificando se um token de seguran\u00e7a v\u00e1lido foi enviado. Se voc\u00ea tentar enviar um formul\u00e1rio sem o token, o Middleware barra a requisi\u00e7\u00e3o antes mesmo dela chegar perto dos seus dados.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para projetos onde a seguran\u00e7a dos dados \u00e9 prioridade, o Middleware de CSRF \u00e9 obrigat\u00f3rio e j\u00e1 vem configurado no <code>Application.php<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">7. Boas Pr\u00e1ticas e Performance<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para garantir que seu uso de Middleware seja de n\u00edvel s\u00eanior, siga estas diretrizes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Mantenha-os &#8220;Leves&#8221;:<\/strong> O Middleware \u00e9 executado em <strong>toda<\/strong> requisi\u00e7\u00e3o. Se voc\u00ea colocar uma consulta de banco de dados pesada dentro de um Middleware, todo o seu site ficar\u00e1 lento.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Tratamento de Exce\u00e7\u00f5es:<\/strong> Sempre envolva l\u00f3gicas sens\u00edveis em blocos <code>try\/catch<\/code>. Um erro no Middleware pode derrubar a aplica\u00e7\u00e3o inteira.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Aproveite os Atributos:<\/strong> Voc\u00ea pode adicionar dados ao objeto <code>$request<\/code> no Middleware para serem usados depois no Controller usando <code>$request->withAttribute('chave', 'valor')<\/code>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Middleware Condicional:<\/strong> Voc\u00ea pode usar o m\u00e9todo <code>addIf()<\/code> para carregar um Middleware apenas em ambiente de desenvolvimento ou produ\u00e7\u00e3o.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Conclus\u00e3o: A Eleg\u00e2ncia da Camada Intermedi\u00e1ria<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dominar o <strong>Middleware no CakePHP<\/strong> \u00e9 o que separa um programador que &#8220;resolve problemas&#8221; de um arquiteto que &#8220;projeta solu\u00e7\u00f5es escal\u00e1veis&#8221;. Ao centralizar comportamentos globais nesta camada, voc\u00ea ganha um c\u00f3digo muito mais limpo (DRY), f\u00e1cil de testar e extremamente modular.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Seja para monitorar a performance de um blog, proteger seu SaaS contra ataques ou simplesmente adicionar cabe\u00e7alhos personalizados em cada resposta, o Middleware \u00e9 a ferramenta definitiva. Voc\u00ea agora entende como &#8220;vigiar as portas&#8221; da sua aplica\u00e7\u00e3o com maestria.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o CakePHP, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no CakePHP, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/html\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/css\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/javascript\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/sql\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/php\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica Final:<\/strong> Se voc\u00ea estiver criando uma API, experimente criar um Middleware que converte automaticamente todos os nomes de campos de <em>camelCase<\/em> para <em>snake_case<\/em>. Isso manter\u00e1 seu banco de dados seguindo as conven\u00e7\u00f5es do CakePHP enquanto sua API fala a l\u00edngua que o front-end (como React ou Vue) prefere!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Middleware no CakePHP: Se voc\u00ea acompanhou o artigo anterior sobre Request &amp; Response, entendeu como&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5819,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-5889","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cakephp","wpcat-97-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Middleware no CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Middleware no CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-11T11:44:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-11T11:52:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Middleware no CakePHP\",\"datePublished\":\"2026-04-11T11:44:06+00:00\",\"dateModified\":\"2026-04-11T11:52:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/\"},\"wordCount\":1024,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"articleSection\":[\"CakePHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/\",\"name\":\"Middleware no CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-11T11:44:06+00:00\",\"dateModified\":\"2026-04-11T11:52:12+00:00\",\"description\":\"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"width\":758,\"height\":426,\"caption\":\"CakePHP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/middleware-no-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Middleware no CakePHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Middleware no CakePHP - BLOG THIAGO ROSSI","description":"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Middleware no CakePHP - BLOG THIAGO ROSSI","og_description":"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...","og_url":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-11T11:44:06+00:00","article_modified_time":"2026-04-11T11:52:12+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","type":"image\/png"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Middleware no CakePHP","datePublished":"2026-04-11T11:44:06+00:00","dateModified":"2026-04-11T11:52:12+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/"},"wordCount":1024,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","articleSection":["CakePHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/","name":"Middleware no CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-11T11:44:06+00:00","dateModified":"2026-04-11T11:52:12+00:00","description":"Middleware no CakePHP: No desenvolvimento web moderno, o conceito de Middleware (camada intermedi\u00e1ria) \u00e9 fundamental. Imagine o Middleware...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","width":758,"height":426,"caption":"CakePHP"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/middleware-no-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Middleware no CakePHP"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5889","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5889"}],"version-history":[{"count":3,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5889\/revisions"}],"predecessor-version":[{"id":5892,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5889\/revisions\/5892"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/5819"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}