{"id":5861,"date":"2026-04-06T12:51:57","date_gmt":"2026-04-06T15:51:57","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5861"},"modified":"2026-04-07T16:53:42","modified_gmt":"2026-04-07T19:53:42","slug":"cakephp-baking-usando-terminal-para-gerar-crud","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/","title":{"rendered":"CakePHP Baking &#8211; usando terminal para gerar CRUD"},"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\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">CakePHP Baking &#8211; usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de &#8220;a virada de chave&#8221; para qualquer desenvolvedor que escolhe o <strong>CakePHP<\/strong>. Se voc\u00ea acompanhou nossa trilha at\u00e9 aqui, j\u00e1 preparou o ambiente, configurou o banco de dados e entendeu a estrutura de pastas. Agora, imagine se voc\u00ea pudesse estalar os dedos e ter todo o c\u00f3digo de um sistema pronto, com valida\u00e7\u00f5es, formul\u00e1rios e listagens, sem digitar uma \u00fanica linha de PHP.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em desenvolvimento \u00e1gil, preparei este oitavo artigo para apresentar o <strong>Bake<\/strong>. Prepare o seu terminal: vamos aprender como o c\u00f3digo &#8220;Shell&#8221; pode gerar <strong>CRUDs em segundos<\/strong> e por que isso vai revolucionar a sua produtividade qualquer um dos seus projetos!<\/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\">Baking: Como usar o c\u00f3digo &#8220;Shell&#8221; para gerar CRUDs em segundos<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No desenvolvimento web, a sigla <strong>CRUD<\/strong> (Create, Read, Update, Delete) representa as opera\u00e7\u00f5es b\u00e1sicas de qualquer sistema. Criar esses formul\u00e1rios e l\u00f3gicas repetitivas manualmente \u00e9 o que consome 70% do tempo de um projeto inicial. O CakePHP resolve isso com o <strong>Bake<\/strong>, um console de linha de comando (CLI) que atua como um mestre de obras, construindo a estrutura da sua aplica\u00e7\u00e3o a partir do esquema do seu banco de dados.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O <strong>Bake<\/strong> n\u00e3o \u00e9 apenas um &#8220;gerador de c\u00f3digo&#8221;; ele \u00e9 um executor inteligente que aplica todas as <strong>conven\u00e7\u00f5es<\/strong> que discutimos no artigo 5, garantindo que seu c\u00f3digo nas\u00e7a seguindo as melhores pr\u00e1ticas de mercado.<\/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 o Bake e como ele funciona?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Bake \u00e9 um shell script que reside na pasta <code>bin\/<\/code> do seu projeto. Ele &#8220;l\u00ea&#8221; as tabelas do seu banco de dados (que conectamos no artigo anterior) e entende os tipos de campos, as chaves estrangeiras e as restri\u00e7\u00f5es. Com base nessa leitura, ele utiliza templates pr\u00e9-definidos para escrever os arquivos da <strong>Model<\/strong>, do <strong>Controller<\/strong> e das <strong>Views<\/strong> (Templates).<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A grande vantagem? O c\u00f3digo gerado n\u00e3o \u00e9 um &#8220;c\u00f3digo sujo&#8221;. Ele \u00e9 limpo, utiliza o ORM do CakePHP e j\u00e1 vem com coment\u00e1rios e tipos de dados do PHP 8.<\/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\">2. Preparando o Terreno para o Baking<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para que o Bake fa\u00e7a um trabalho de excel\u00eancia, seu banco de dados precisa estar bem estruturado. Se voc\u00ea usou as <strong>Migrations<\/strong> (artigo 6), voc\u00ea j\u00e1 est\u00e1 meio caminho andado.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagine uma tabela <code>artigos<\/code>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><code>id<\/code> (INT, PK, AI)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>titulo<\/code> (VARCHAR 150)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>corpo<\/code> (TEXT)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>publicado<\/code> (BOOLEAN)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>created<\/code> (DATETIME)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>modified<\/code> (DATETIME)<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se o Bake encontrar essa estrutura, ele saber\u00e1 que o <code>titulo<\/code> deve ser um campo de texto simples, o <code>corpo<\/code> um <code>textarea<\/code> e o <code>publicado<\/code> um <code>checkbox<\/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\">3. Comandos Essenciais do Bake<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Abra o terminal na raiz do seu projeto. O comando principal \u00e9 o <code>bin\/cake bake<\/code>. Se voc\u00ea rodar apenas isso, ver\u00e1 uma lista de tudo o que pode ser gerado: de classes de teste a comandos de console personalizados.<\/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\">Gerando o CRUD Completo (The &#8220;All&#8221; Command)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Este \u00e9 o comando que todo desenvolvedor CakePHP ama. Ele gera a Model (Table e Entity), o Controller e todas as Views de uma s\u00f3 vez:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake bake all artigos\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>O que acontece em segundos?<\/strong><\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Model\/Table\/ArtigosTable.php<\/strong>: Criada com regras de valida\u00e7\u00e3o autom\u00e1ticas (ex: o campo <code>titulo<\/code> n\u00e3o pode ser vazio).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Model\/Entity\/Artigo.php<\/strong>: Criada com as propriedades mapeadas.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Controller\/ArtigosController.php<\/strong>: Criado com os m\u00e9todos <code>index<\/code>, <code>view<\/code>, <code>add<\/code>, <code>edit<\/code> e <code>delete<\/code> prontos.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>templates\/Artigos\/<\/strong>: Quatro arquivos <code>.php<\/code> criados com HTML e formul\u00e1rios integrados ao framework.<\/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\">4. Anatomia do C\u00f3digo Gerado<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Vamos olhar o que o Bake fez por voc\u00ea no <strong>Controller<\/strong>, por exemplo. Ele n\u00e3o apenas criou a fun\u00e7\u00e3o, mas tamb\u00e9m adicionou a l\u00f3gica de tratamento de erros e mensagens de sucesso (Flash Messages).<\/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>\/\/ src\/Controller\/ArtigosController.php (Simplificado)\n\npublic function add()\n{\n    $artigo = $this-&gt;Artigos-&gt;newEmptyEntity();\n    if ($this-&gt;request-&gt;is('post')) {\n        $artigo = $this-&gt;Artigos-&gt;patchEntity($artigo, $this-&gt;request-&gt;getData());\n        if ($this-&gt;Artigos-&gt;save($artigo)) {\n            $this-&gt;Flash-&gt;success(__('O artigo foi salvo com sucesso.'));\n            return $this-&gt;redirect(&#91;'action' =&gt; 'index']);\n        }\n        $this-&gt;Flash-&gt;error(__('N\u00e3o foi poss\u00edvel salvar o artigo. Tente novamente.'));\n    }\n    $this-&gt;set(compact('artigo'));\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagine digitar isso para cada tabela do seu sistema. Com o Bake, isso \u00e9 instant\u00e2neo.<\/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. Baking de Relacionamentos: A Intelig\u00eancia Artificial do Framework<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Aqui est\u00e1 o &#8220;pulo do gato&#8221; que surpreende muita gente. Se voc\u00ea tem uma tabela <code>categorias<\/code> e na tabela <code>artigos<\/code> existe um campo <code>categoria_id<\/code>, o Bake identifica essa rela\u00e7\u00e3o <strong>BelongsTo<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ao rodar o <code>bake all artigos<\/code>, ele automaticamente:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Cria a associa\u00e7\u00e3o na Model.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">No formul\u00e1rio de &#8220;Adicionar Artigo&#8221;, ele gera um <strong>Select Box<\/strong> (Dropdown) j\u00e1 populado com todas as categorias cadastradas no banco.<\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Isso elimina um dos trabalhos mais chatos do desenvolvimento web: buscar dados de outra tabela apenas para preencher um campo de sele\u00e7\u00e3o.<\/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. Personalizando o seu &#8220;Bolo&#8221;<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Muitos desenvolvedores perguntam: <em>&#8220;Mas e se eu quiser que o c\u00f3digo gerado seja diferente?&#8221;<\/em>. O CakePHP permite que voc\u00ea crie seus pr\u00f3prios <strong>Bake Templates<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se voc\u00ea trabalha com algum framework css &#8211; (sou muito f\u00e3 do <strong>MaterializeCSS<\/strong>), voc\u00ea pode copiar os arquivos de template do Bake para dentro da sua pasta <code>src\/<\/code> e edit\u00e1-los. Assim, toda vez que voc\u00ea rodar o comando <code>bake<\/code>, o HTML gerado j\u00e1 vir\u00e1 com as classes CSS do Materialize aplicadas.<\/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: Quando usar o Bake?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Bake \u00e9 perfeito para o <strong>in\u00edcio<\/strong> do projeto. Ele cria o &#8220;esqueleto&#8221; funcional. No entanto, lembre-se:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>N\u00e3o tenha medo de apagar:<\/strong> O c\u00f3digo gerado \u00e9 seu. Se a View ficou com campos demais, abra o arquivo e delete o que n\u00e3o precisa.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Sobrescrita:<\/strong> Se voc\u00ea rodar o comando de novo em uma tabela que j\u00e1 tem arquivos, o Bake perguntar\u00e1 se voc\u00ea deseja sobrescrev\u00ea-los. <strong>Cuidado!<\/strong> Se voc\u00ea j\u00e1 customizou o c\u00f3digo, perder\u00e1 suas altera\u00e7\u00f5es.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Prototipagem R\u00e1pida:<\/strong> Use o Bake para mostrar uma vers\u00e3o funcional do sistema para um cliente ou para validar uma ideia de SaaS em horas, n\u00e3o dias.<\/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\">Conclus\u00e3o CakePHP Baking: De Programador a Maestro<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">CakePHP Baking: O uso do <strong>Baking no CakePHP<\/strong> muda a sua rela\u00e7\u00e3o com o tempo. Em vez de gastar energia com o b\u00e1sico (CRUD), voc\u00ea gasta sua intelig\u00eancia criando as regras de neg\u00f3cio complexas, otimizando a performance e cuidando da experi\u00eancia do usu\u00e1rio.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O Bake n\u00e3o substitui o desenvolvedor; ele o empodera. Ele remove o trabalho bra\u00e7al e deixa o caminho livre para a criatividade. Com um banco de dados bem planejado e o comando <code>bake all<\/code>, voc\u00ea consegue colocar um sistema administrativo inteiro de p\u00e9 em menos de 10 minutos.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora que voc\u00ea j\u00e1 tem o seu CRUD funcionando e &#8220;assado&#8221;, \u00e9 hora de entender o que est\u00e1 acontecendo por baixo do cap\u00f4 das suas Tabelas e Entidades. No pr\u00f3ximo artigo, veremos: <strong>&#8220;Table Objects vs Entities: Entendendo a manipula\u00e7\u00e3o de dados.&#8221;<\/strong><\/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 CakePHP Baking:<\/strong> Se voc\u00ea estiver com pregui\u00e7a de criar as tabelas no MySQL para testar o Bake, use o plugin de Migrations que vimos no artigo 6. Crie a migration, rode o migrate e depois o bake. \u00c9 o fluxo de trabalho mais r\u00e1pido que existe no ecossistema PHP.<\/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\"> 6<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>CakePHP Baking &#8211; usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de&#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-5861","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>CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de &quot;a virada de chave&quot; para qualquer desenvolvedor...\" \/>\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\/cakephp-baking-usando-terminal-para-gerar-crud\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de &quot;a virada de chave&quot; para qualquer desenvolvedor...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-06T15:51:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-07T19:53:42+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\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"CakePHP Baking &#8211; usando terminal para gerar CRUD\",\"datePublished\":\"2026-04-06T15:51:57+00:00\",\"dateModified\":\"2026-04-07T19:53:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/\"},\"wordCount\":1178,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#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\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/\",\"name\":\"CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-06T15:51:57+00:00\",\"dateModified\":\"2026-04-07T19:53:42+00:00\",\"description\":\"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de \\\"a virada de chave\\\" para qualquer desenvolvedor...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#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\\\/cakephp-baking-usando-terminal-para-gerar-crud\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CakePHP Baking &#8211; usando terminal para gerar CRUD\"}]},{\"@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":"CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI","description":"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de \"a virada de chave\" para qualquer desenvolvedor...","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\/cakephp-baking-usando-terminal-para-gerar-crud\/","og_locale":"pt_BR","og_type":"article","og_title":"CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI","og_description":"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de \"a virada de chave\" para qualquer desenvolvedor...","og_url":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-06T15:51:57+00:00","article_modified_time":"2026-04-07T19:53:42+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\/cakephp-baking-usando-terminal-para-gerar-crud\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"CakePHP Baking &#8211; usando terminal para gerar CRUD","datePublished":"2026-04-06T15:51:57+00:00","dateModified":"2026-04-07T19:53:42+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/"},"wordCount":1178,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/#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\/cakephp-baking-usando-terminal-para-gerar-crud\/","url":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/","name":"CakePHP Baking - usando terminal para gerar CRUD - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-06T15:51:57+00:00","dateModified":"2026-04-07T19:53:42+00:00","description":"CakePHP Baking - usando terminal para gerar CRUD: Chegamos ao momento que costumo chamar de \"a virada de chave\" para qualquer desenvolvedor...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-baking-usando-terminal-para-gerar-crud\/#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\/cakephp-baking-usando-terminal-para-gerar-crud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"CakePHP Baking &#8211; usando terminal para gerar CRUD"}]},{"@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\/5861","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=5861"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5861\/revisions"}],"predecessor-version":[{"id":5863,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5861\/revisions\/5863"}],"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=5861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}