{"id":5926,"date":"2026-04-14T13:47:52","date_gmt":"2026-04-14T16:47:52","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5926"},"modified":"2026-04-14T13:51:02","modified_gmt":"2026-04-14T16:51:02","slug":"gerenciando-css-e-js-com-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/","title":{"rendered":"Gerenciando CSS e JS com 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\">Gerenciando CSS e JS com CakePHP: Voc\u00ea j\u00e1 sentiu que o front-end do seu projeto est\u00e1 ficando para tr\u00e1s enquanto o back-end voa baixo com o CakePHP? No mundo do desenvolvimento web moderno, n\u00e3o basta ter um servidor robusto; a experi\u00eancia do usu\u00e1rio (UX) precisa ser r\u00e1pida, responsiva e visualmente impec\u00e1vel. Mas como integrar ferramentas como <strong>Tailwind CSS<\/strong>, <strong>Vite<\/strong>, ou bibliotecas <strong>JavaScript<\/strong> complexas dentro da estrutura tradicional do CakePHP?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este vig\u00e9simo quarto artigo da nossa trilha para desvendar o gerenciamento de <strong>Assets<\/strong>. Vamos aprender como sair do b\u00e1sico e integrar um fluxo de trabalho de front-end moderno, garantindo que seu blog de 500 artigos ou o portal <strong>RPJobs<\/strong> carreguem na velocidade da luz.<\/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\">Gerenciando Assets: Integrando CSS\/JS modernos no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos <code>.css<\/code> e <code>.js<\/code> dentro da pasta <code>webroot\/<\/code> e cham\u00e1-los no layout. No entanto, com a ascens\u00e3o de pr\u00e9-processadores (SASS\/LESS), frameworks de utilit\u00e1rios e empacotadores (Bundlers), esse fluxo mudou.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No CakePHP, o desafio \u00e9 manter a eleg\u00e2ncia das conven\u00e7\u00f5es do framework enquanto aproveitamos o ecossistema vibrante do Node.js e do npm. Gerenciar <strong>Assets modernos<\/strong> de forma profissional \u00e9 o que separa um site amador de uma aplica\u00e7\u00e3o de alta performance.<\/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. A Estrutura Nativa: A pasta <code>webroot<\/code><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O ponto de partida sempre ser\u00e1 a pasta <code>webroot\/<\/code>. Ela \u00e9 a \u00fanica pasta acess\u00edvel publicamente pelo navegador. Por padr\u00e3o, o CakePHP a organiza assim:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><code>webroot\/css\/<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>webroot\/js\/<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>webroot\/img\/<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para chamar esses arquivos, usamos o <strong>HtmlHelper<\/strong> (que vimos no Artigo 14), que garante que os caminhos funcionem mesmo se sua aplica\u00e7\u00e3o estiver em uma subpasta.<\/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>\/\/ No seu layout ou view\necho $this-&gt;Html-&gt;css('estilos'); \/\/ Renderiza &lt;link rel=\"stylesheet\" href=\"\/css\/estilos.css\"&gt;\necho $this-&gt;Html-&gt;script('app');   \/\/ Renderiza &lt;script src=\"\/js\/app.js\"&gt;&lt;\/script&gt;\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\">2. Integrando Ferramentas Modernas (Vite ou Webpack)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para usar tecnologias como <strong>Tailwind CSS<\/strong> ou <strong>ES6+<\/strong>, voc\u00ea precisa de um compilador. A tend\u00eancia atual \u00e9 o uso do <strong>Vite<\/strong> pela sua velocidade absurda.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">O Fluxo de Trabalho Ideal<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Em vez de editar arquivos diretamente na <code>webroot<\/code>, criamos uma pasta na raiz do projeto chamada <code>assets\/<\/code>. \u00c9 aqui que voc\u00ea escreve seu c\u00f3digo moderno. O compilador (Vite\/Laravel Mix) l\u00ea esses arquivos e &#8220;cospe&#8221; a vers\u00e3o otimizada e minificada dentro da <code>webroot<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de Configura\u00e7\u00e3o com Vite:<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Inicie o npm na raiz: <code>npm init -y<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\">Instale o Vite e o Tailwind: <code>npm install -D vite tailwindcss postcss autoprefixer<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\">Configure o <code>vite.config.js<\/code> para salvar os arquivos gerados em <code>webroot\/dist\/<\/code>.<\/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\">3. O Dilema do Cache e Vers\u00e3o (Asset Versioning)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Um problema comum: voc\u00ea atualiza seu CSS, mas o usu\u00e1rio n\u00e3o v\u00ea a mudan\u00e7a porque o navegador guardou a vers\u00e3o antiga no cache. O CakePHP tem uma solu\u00e7\u00e3o nativa e elegante para isso: o <strong>Timestamping<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No seu arquivo <code>config\/app.php<\/code> ou <code>config\/app_local.php<\/code>, voc\u00ea pode habilitar:<\/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>'Asset' =&gt; &#91;\n    'timestamp' =&gt; true,\n],\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Isso far\u00e1 com que o CakePHP adicione um sufixo de tempo aos seus arquivos (ex: <code>estilos.css?1681400000<\/code>). Sempre que o arquivo mudar, o n\u00famero muda, for\u00e7ando o navegador a baixar a vers\u00e3o nova. <strong>Essencial para SEO e UX!<\/strong><\/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\">4. Gerenciando Bibliotecas de Terceiros: npm vs CDN<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Devemos usar CDNs (como o JSDelivr) ou baixar tudo via npm?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>CDN:<\/strong> Mais f\u00e1cil de configurar e pode ser mais r\u00e1pido se o usu\u00e1rio j\u00e1 tiver o arquivo em cache de outro site.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>npm:<\/strong> Oferece controle total, permite minificar tudo em um \u00fanico arquivo (reduzindo requisi\u00e7\u00f5es HTTP) e n\u00e3o depende de servidores externos.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para projetos profissionais, prefira o <strong>npm<\/strong>. Centralizar suas depend\u00eancias torna o projeto mais seguro e independente.<\/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. View Blocks: CSS e JS sob demanda<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nem toda p\u00e1gina precisa do script de &#8220;Gr\u00e1ficos&#8221; ou da folha de estilos da &#8220;Galeria&#8221;. Carregar tudo em todas as p\u00e1ginas mata a performance. Use os <strong>Blocks<\/strong> que aprendemos no Artigo 15 para injetar ativos apenas onde necess\u00e1rio.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Na View (<code>vagas\/estatisticas.php<\/code>):<\/h3>\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>&lt;?php $this-&gt;append('css'); ?&gt;\n    &lt;?= $this-&gt;Html-&gt;css('graficos-vagas') ?&gt;\n&lt;?php $this-&gt;end(); ?&gt;\n\n&lt;?php $this-&gt;append('script'); ?&gt;\n    &lt;?= $this-&gt;Html-&gt;script('https:\/\/cdn.jsdelivr.net\/npm\/chart.js') ?&gt;\n&lt;?php $this-&gt;end(); ?&gt;\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP levar\u00e1 esses elementos para o <code>&lt;head&gt;<\/code> ou para o final do <code>&lt;body&gt;<\/code> no seu layout automaticamente.<\/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\">6. Otimiza\u00e7\u00e3o de Imagens: O toque final<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagens pesadas s\u00e3o as maiores vil\u00e3s do carregamento. Al\u00e9m de usar o <code>HtmlHelper<\/code> para exibir imagens, considere integrar ferramentas de otimiza\u00e7\u00e3o no seu fluxo de build para gerar vers\u00f5es em <strong>WebP<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No CakePHP, voc\u00ea tamb\u00e9m pode usar bibliotecas como a <code>Imagine<\/code> (via Composer) para redimensionar fotos de perfil ou miniaturas de artigos dinamicamente, salvando-as em cache para n\u00e3o processar duas vezes a mesma imagem.<\/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 para Ativos de Elite<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para garantir um front-end de alto n\u00edvel no seu ecossistema CakePHP, siga estas diretrizes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Minifica\u00e7\u00e3o:<\/strong> Em produ\u00e7\u00e3o, seus arquivos CSS e JS devem estar sempre minificados (sem espa\u00e7os ou coment\u00e1rios).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Ordem de Carregamento:<\/strong> CSS sempre no <code>&lt;head><\/code> (para evitar o &#8220;salto&#8221; de layout) e JS preferencialmente no final do <code>&lt;body><\/code> ou com o atributo <code>defer<\/code>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Critical CSS:<\/strong> Para o um blog, por exemplo, considere colocar o CSS essencial (o que aparece &#8220;acima da dobra&#8221;) diretamente no HTML para um carregamento instant\u00e2neo.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Organize seus scripts:<\/strong> N\u00e3o escreva JavaScript diretamente no HTML das views. Crie arquivos <code>.js<\/code> pequenos e modulares e use o <code>HtmlHelper<\/code> para cham\u00e1-los.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Vari\u00e1veis de Ambiente:<\/strong> Se usar ferramentas de build, lembre-se de configurar caminhos diferentes para desenvolvimento (hot reload) e produ\u00e7\u00e3o (arquivos minificados).<\/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: Front-end Moderno com Alma de Framework<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Gerenciando CSS e JS com CakePHP: Gerenciar <strong>Assets modernos no CakePHP<\/strong> \u00e9 o que d\u00e1 o polimento final ao seu trabalho como desenvolvedor web especialista. Ao integrar as melhores ferramentas do ecossistema front-end com a estrutura organizada do Cake, voc\u00ea cria aplica\u00e7\u00f5es que n\u00e3o s\u00e3o apenas poderosas no servidor, mas tamb\u00e9m \u00e1geis e encantadoras no navegador.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Seja implementando um tema Dark Mode com Tailwind no seu blog ou garantindo que o painel do <strong>RPJobs<\/strong> seja carregado em milissegundos, o dom\u00ednio sobre o gerenciamento de ativos \u00e9 a chave para a satisfa\u00e7\u00e3o do usu\u00e1rio final. Sua aplica\u00e7\u00e3o agora est\u00e1 pronta para brilhar em qualquer tela.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Com este artigo, fechamos o ciclo visual da nossa s\u00e9rie. Voc\u00ea agora \u00e9 capaz de construir sistemas completos, protegidos por testes e com um visual moderno e otimizado.<\/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 de Especialista:<\/strong> Se voc\u00ea usa o <strong>Tailwind CSS<\/strong>, utilize o comando <code>jit<\/code> (Just-In-Time) durante o desenvolvimento. Ele gera apenas o CSS que voc\u00ea realmente est\u00e1 usando nas suas views do CakePHP, mantendo seu arquivo de estilos min\u00fasculo e extremamente r\u00e1pido!<\/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>Gerenciando CSS e JS com CakePHP: Voc\u00ea j\u00e1 sentiu que o front-end do seu projeto&#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-5926","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>Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..\" \/>\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\/gerenciando-css-e-js-com-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-14T16:47:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-14T16:51:02+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=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Gerenciando CSS e JS com CakePHP\",\"datePublished\":\"2026-04-14T16:47:52+00:00\",\"dateModified\":\"2026-04-14T16:51:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/\"},\"wordCount\":1115,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-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\\\/gerenciando-css-e-js-com-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/\",\"name\":\"Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-14T16:47:52+00:00\",\"dateModified\":\"2026-04-14T16:51:02+00:00\",\"description\":\"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/gerenciando-css-e-js-com-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\\\/gerenciando-css-e-js-com-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gerenciando CSS e JS com 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":"Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI","description":"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..","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\/gerenciando-css-e-js-com-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI","og_description":"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..","og_url":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-14T16:47:52+00:00","article_modified_time":"2026-04-14T16:51:02+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":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Gerenciando CSS e JS com CakePHP","datePublished":"2026-04-14T16:47:52+00:00","dateModified":"2026-04-14T16:51:02+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/"},"wordCount":1115,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-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\/gerenciando-css-e-js-com-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/","name":"Gerenciando CSS e JS com CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-14T16:47:52+00:00","dateModified":"2026-04-14T16:51:02+00:00","description":"Gerenciando CSS e JS com CakePHP: Tradicionalmente, gerenciar ativos (Assets) em um framework PHP significava apenas colocar arquivos .css e..","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/gerenciando-css-e-js-com-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\/gerenciando-css-e-js-com-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Gerenciando CSS e JS com 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\/5926","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=5926"}],"version-history":[{"count":1,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5926\/revisions"}],"predecessor-version":[{"id":5927,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5926\/revisions\/5927"}],"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=5926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}