{"id":1288,"date":"2017-04-03T11:39:38","date_gmt":"2017-04-03T10:39:38","guid":{"rendered":"https:\/\/www.kumbiaphp.com\/blog\/?p=1288"},"modified":"2020-04-30T00:28:19","modified_gmt":"2020-04-29T23:28:19","slug":"scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte","status":"publish","type":"post","link":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/","title":{"rendered":"Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte"},"content":{"rendered":"<h2>\u00bfQu\u00e9 es Scaffolding?<\/h2>\n<p>Cuando comenz\u00f3 el fen\u00f3meno de los frameworks de desarrollo web, una de sus banderas de lucha estuvo de la mano de los scaffoldings (andamios).<\/p>\n<p>Un scaffold es en s\u00ed una t\u00e9cnica que proveen muchos frameworks, con la que podr\u00e1s tener un gestor de datos para una tabla particular escribiendo una cantidad m\u00ednima de c\u00f3digo (en KumbiaPHP bastan 7 l\u00edneas de c\u00f3digo \u2013 excluyendo 2 l\u00edneas de encabezado php \u2013 ).<\/p>\n<p>En mis primeros a\u00f1os de kumbiero comenc\u00e9 creando un controlador para las acciones cl\u00e1sicas de CRUD (Create, Read, Update y Delete), un modelo para apuntar la tabla de la base de datos y al menos 3 archivos de vista (index, agregar y editar).<\/p>\n<p>Para hacer el CRUD de otra tabla copiaba el controlador inicial en el nuevo, luego editaba todo lo que correspond\u00eda, y lo mismo hac\u00eda para el modelo y las vistas.<\/p>\n<p>Como ver\u00e1n es un trabajo arduo, pero no es tanto trabajo\u2026 a menos que tengas m\u00e1s de 10 tablas.<\/p>\n<p>Si pueden hacer el ejercicio de mirar el bosque desde lejos, casi todos los CRUDs creados tienen las mismas acciones, y usan las mismas vistas (con sus leves diferencias).<\/p>\n<h2>La iluminaci\u00f3n<\/h2>\n<p>Fue entonces que un d\u00eda de IRC (el chat que us\u00e1bamos antes), los colegas del core de KumbiaPHP me presentaron a ScaffoldController.<\/p>\n<p>Es un amigo silencioso, puesto que est\u00e1 alojado en default\/app\/libs, pero adem\u00e1s es un amigo confiable, pues hereda de AdminController (eso quiere decir que si damos cierta habilidad de autenticaci\u00f3n al AdminController, los controllers que hagamos usando ScaffoldController tambi\u00e9n estar\u00e1n asegurados).<\/p>\n<h2>Configuraci\u00f3n inicial<\/h2>\n<p>Si este es un proyecto que ha iniciado desde cero, deber\u00e1 configurar el acceso a la base de datos antes de continuar.<\/p>\n<p>Para eso usaremos el archivo <em>default\/app\/config\/database.ini<\/em>. En \u00e9l se definen los entornos de datos que usar\u00e1 nuestra aplicaci\u00f3n, los que normalmente son: development (desarrollo) y production (producci\u00f3n)<\/p>\n<p><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/database-setting.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1890 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/database-setting.png\" alt=\"Archivo databases.ini de KumbiaPHP\" width=\"585\" height=\"339\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/database-setting.png 585w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/database-setting-300x174.png 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<p>Los par\u00e1metros de configuraci\u00f3n que debemos revisar son:<\/p>\n<ul>\n<li><strong>host<\/strong>: Nombre de red o direcci\u00f3n ip del equipo en el cual est\u00e1 instalada la base de datos.<\/li>\n<li><strong>username<\/strong>: usuario de la base de datos.<\/li>\n<li><strong>password<\/strong>: contrase\u00f1a del usuario de la base de datos.<\/li>\n<li><strong>name<\/strong>: nombre de la base de datos.<\/li>\n<li><strong>type<\/strong>: el tipo de base de datos que usar\u00e1 el proyecto, como mysql, pgsql, oracle.<\/li>\n<\/ul>\n<p>Para indicarle al proyecto que debe usar uno u otro entorno de base de datos, ser\u00e1 necesario modificar el archivo de configuraci\u00f3n <em>default\/app\/config\/config.php<\/em>. De forma predeterminada la configuraci\u00f3n del entorno de base de datos es &#8216;default&#8217;, pero lo dejaremos inicialmente como &#8216;development&#8217;.<\/p>\n<p><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/datbase-default.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1891 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/datbase-default.png\" alt=\"Archivo config.php de KumbiaPHP\" width=\"473\" height=\"419\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/datbase-default.png 473w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/04\/datbase-default-300x266.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><\/p>\n<p>Lista la configuraci\u00f3n, sigamos con la acci\u00f3n.<\/p>\n<h2>De la teor\u00eda a la acci\u00f3n<\/h2>\n<p>Bueno, mucho texto y poca acci\u00f3n (o como versa el dicho \u201cmucho ruido y pocas nueces\u201d).<\/p>\n<p>En nuestro primer ejemplo usaremos la cl\u00e1sica tabla de categor\u00edas, con la siguiente estructura:<\/p>\n<pre class=\"  language-sql\"><code class=\"\" data-line=\"\">\n&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;\/span&gt; categorias &lt;span class=&quot;token punctuation&quot;&gt;(&lt;\/span&gt;\n id &lt;span class=&quot;token keyword&quot;&gt;int&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;\/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;\/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;\/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AUTO_INCREMENT&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;\/span&gt;\n nombre &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;\/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;\/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;\/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UNIQUE&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;\/span&gt;\n categorias_id &lt;span class=&quot;token keyword&quot;&gt;int&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;\/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;\/span&gt;\n creada_at &lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;\/span&gt;\n actualizada_in &lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;\/span&gt;\n &lt;span class=&quot;token keyword&quot;&gt;PRIMARY&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;KEY&lt;\/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;\/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;)&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;\/span&gt;<\/code><\/pre>\n<p>Ahora crearemos un modelo llamado Categorias.<\/p>\n<p>Archivo: <em>models\/categorias.php<\/em><\/p>\n<pre class=\"  language-php\"><code class=\"\" data-line=\"\">\n&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;\/span&gt;\n&lt;span class=&quot;token keyword&quot;&gt;class&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Categorias&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ActiveRecord&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;{&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;}&lt;\/span&gt;<\/code><\/pre>\n<p>Y finalmente <strong>(s\u00ed, finalmente)<\/strong> a\u00f1adiremos el controlador CategoriasController.<\/p>\n<p>Archivo: <em>controllers\/categoria_controller.php<\/em><\/p>\n<pre class=\"  language-php\"><code class=\"\" data-line=\"\">\n&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;\/span&gt;\n&lt;span class=&quot;token keyword&quot;&gt;class&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CategoriasController&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScaffoldController&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;{&lt;\/span&gt;\n &lt;span class=&quot;token keyword&quot;&gt;public&lt;\/span&gt; &lt;span class=&quot;token variable&quot;&gt;$model&lt;\/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;Categorias&#039;&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;}&lt;\/span&gt;<\/code><\/pre>\n<p><!--more--><\/p>\n<h2>\u00a1Y hemos terminado!<\/h2>\n<p>As\u00ed de sencillo ya tenemos nuestro primer CRUD sin dolor.<\/p>\n<p><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_05_35.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1322 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_05_35.png\" alt=\"\" width=\"877\" height=\"571\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_05_35.png 877w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_05_35-300x195.png 300w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_05_35-768x500.png 768w\" sizes=\"auto, (max-width: 877px) 100vw, 877px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_12_14.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1321 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_12_14.png\" alt=\"\" width=\"880\" height=\"583\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_12_14.png 880w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_12_14-300x199.png 300w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/VirtualBox_ubuntu_31_03_2017_11_12_14-768x509.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/a><\/p>\n<p>Tendremos inicialmente las acciones para index, agregar, editar, ver y eliminar, y s\u00f3lo hemos escrito 7 l\u00edneas.<\/p>\n<h2>Personalizando las vistas<\/h2>\n<p>Y ahora, \u00bfqui\u00e9n podr\u00e1 defendernos de la hoja de estilo predeterminada? \u00a1Excelente pregunta!<\/p>\n<p>Bueno, los muchachos del core ya tuvieron eso previsto para nosotros. Resulta que puedes crear tus propias vistas para usarlas con tus controladores de Scaffold. Basta copiar el contenido de <em>app\/views\/_shared\/scaffold\/kumbia<\/em> en una nueva versi\u00f3n de vistas para tus controladores.<\/p>\n<p><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/skeleton.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1306 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/skeleton.png\" alt=\"\" width=\"668\" height=\"235\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/skeleton.png 668w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/skeleton-300x106.png 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/a><\/p>\n<p>Supongamos que nos piden usar <a href=\"http:\/\/getskeleton.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">skeleton<\/a>. Por lo tanto ahora tendremos una carpeta llamada <em>app\/views\/_shared\/scaffolds\/skeleton<\/em>, con los mismos tres archivos de vistas: crear, index, ver.<\/p>\n<p>Y \u00bfc\u00f3mo le decimos a nuestros controladores que usen nuestro nuevo conjunto de vistas?<br \/>\n<strong>Sencillo:<\/strong><\/p>\n<pre class=\"  language-php\"><code class=\"\" data-line=\"\">\n&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;\/span&gt;\n&lt;span class=&quot;token keyword&quot;&gt;class&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CategoriasController&lt;\/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;\/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScaffoldController&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;{&lt;\/span&gt;\n &lt;span class=&quot;token keyword&quot;&gt;public&lt;\/span&gt; &lt;span class=&quot;token variable&quot;&gt;$model&lt;\/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;Categorias&#039;&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;\/span&gt;\n &lt;span class=&quot;token keyword&quot;&gt;public&lt;\/span&gt; &lt;span class=&quot;token variable&quot;&gt;$scaffold&lt;\/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;skeleton&#039;&lt;\/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;\/span&gt;\n&lt;span class=&quot;token punctuation&quot;&gt;}&lt;\/span&gt;<\/code><\/pre>\n<h2>El resultado final<\/h2>\n<p>Si miramos el resultado tendremos algo como lo que se ve en las siguientes im\u00e1genes:<\/p>\n<figure id=\"attachment_1307\" aria-describedby=\"caption-attachment-1307\" style=\"width: 914px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/index-sk.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1307 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/index-sk-e1490969789984.png\" alt=\"Vista usando skeleton\" width=\"914\" height=\"392\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/index-sk-e1490969789984.png 914w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/index-sk-e1490969789984-300x129.png 300w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/index-sk-e1490969789984-768x329.png 768w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/a><figcaption id=\"caption-attachment-1307\" class=\"wp-caption-text\">Vista usando skeleton<\/figcaption><\/figure>\n<figure id=\"attachment_1308\" aria-describedby=\"caption-attachment-1308\" style=\"width: 910px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/editar-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1308 size-full\" src=\"https:\/\/www.kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/editar-1-e1490970004190.png\" alt=\"Formulario usando skeleton\" width=\"910\" height=\"336\" srcset=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/editar-1-e1490970004190.png 910w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/editar-1-e1490970004190-300x111.png 300w, https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2017\/03\/editar-1-e1490970004190-768x284.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/a><figcaption id=\"caption-attachment-1308\" class=\"wp-caption-text\">Formulario usando skeleton<\/figcaption><\/figure>\n<p>As\u00ed de f\u00e1cil logramos crear nuestro primer CRUD con 8 l\u00edneas de c\u00f3digo y con nuestro css preferido (o requerido).<\/p>\n<p>Si quieres ver lo que sigue, mira en los enlaces que est\u00e1n a continuaci\u00f3n:<\/p>\n<p><strong>Parte 2:<\/strong> <a href=\"https:\/\/www.kumbiaphp.com\/blog\/2017\/04\/12\/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad\/\">ScaffoldController: Modificando comportamientos y contenidos<\/a><\/p>\n<p><strong>Parte 3:<\/strong> \u00a0<a href=\"https:\/\/www.kumbiaphp.com\/blog\/2017\/05\/16\/scaffoldcontroller-modificando-vistas\/\">ScaffoldController: Modificando vistas<\/a><\/p>\n<h2>Descarga el ejemplo completo<\/h2>\n<p>Pueden descargar el c\u00f3digo del proyecto desde el siguiente repositorio de <a href=\"https:\/\/github.com\/nelsonrojas\/Scaffold-KumbiaPHP\" target=\"_blank\" rel=\"noopener noreferrer\">Github<\/a><\/p>\n<p>Si buscan el script de la tabla de categor\u00edas pueden encontrarlo dentro de <em><a href=\"https:\/\/github.com\/nelsonrojas\/Scaffold-KumbiaPHP\/tree\/master\/default\/app\/config\/sql\" target=\"_blank\" rel=\"noopener noreferrer\">app\/config\/sql<\/a><\/em><\/p>\n<p><strong>\u00a1Larga vida a KumbiaPHP!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es Scaffolding? Cuando comenz\u00f3 el fen\u00f3meno de los frameworks de desarrollo web, una de sus banderas de lucha&hellip;<\/p>\n","protected":false},"author":18,"featured_media":2300,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[20,1,9],"tags":[38,36,111],"class_list":["post-1288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-activerecord","category-php","category-tutoriales-y-screencast","tag-crud","tag-ejemplos","tag-scaffold"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol\" \/>\n<meta property=\"og:description\" content=\"\u00bfQu\u00e9 es Scaffolding? Cuando comenz\u00f3 el fen\u00f3meno de los frameworks de desarrollo web, una de sus banderas de lucha&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/\" \/>\n<meta property=\"og:site_name\" content=\"KumbiaPHP Framework PHP en espa\u00f1ol\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kumbia.fw\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-03T10:39:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-29T23:28:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1058\" \/>\n\t<meta property=\"og:image:height\" content=\"595\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Nelson Rojas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nelson955443098\" \/>\n<meta name=\"twitter:site\" content=\"@kumbiaphp\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nelson Rojas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/\"},\"author\":{\"name\":\"Nelson Rojas\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#\\\/schema\\\/person\\\/f321b5debe6a875d1d1d1154e4502ffb\"},\"headline\":\"Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte\",\"datePublished\":\"2017-04-03T10:39:38+00:00\",\"dateModified\":\"2020-04-29T23:28:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/\"},\"wordCount\":797,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/scaffolding.jpg\",\"keywords\":[\"crud\",\"ejemplos\",\"scaffold\"],\"articleSection\":[\"ActiveRecord\",\"PHP\",\"Tutoriales y screencast\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/\",\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/\",\"name\":\"Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/scaffolding.jpg\",\"datePublished\":\"2017-04-03T10:39:38+00:00\",\"dateModified\":\"2020-04-29T23:28:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#primaryimage\",\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/scaffolding.jpg\",\"contentUrl\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/02\\\/scaffolding.jpg\",\"width\":1058,\"height\":595,\"caption\":\"Scaffolding para CRUD (ABM) sencillos (y no tanto) \u2013 primera parte\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/2017\\\/04\\\/03\\\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/\",\"name\":\"KumbiaPHP Framework PHP en espa\u00f1ol\",\"description\":\"Web &amp; app MVC PHP framework\",\"publisher\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#organization\",\"name\":\"KumbiaPHP Framework PHP en espa\u00f1ol\",\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/logo.png\",\"contentUrl\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/logo.png\",\"width\":432,\"height\":50,\"caption\":\"KumbiaPHP Framework PHP en espa\u00f1ol\"},\"image\":{\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/kumbia.fw\",\"https:\\\/\\\/x.com\\\/kumbiaphp\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/#\\\/schema\\\/person\\\/f321b5debe6a875d1d1d1154e4502ffb\",\"name\":\"Nelson Rojas\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g\",\"caption\":\"Nelson Rojas\"},\"description\":\"Especialista en c\u00f3digo de programaci\u00f3n y bases de datos, uso de herramientas Open Source, conferencista ocasional.\",\"sameAs\":[\"http:\\\/\\\/nelsonrojas.wordpress.com\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/nelson-rojas-nu\u00f1ez-888a60239\\\/\",\"https:\\\/\\\/x.com\\\/nelson955443098\",\"https:\\\/\\\/www.youtube.com\\\/@nelsonrojasnunez\"],\"url\":\"https:\\\/\\\/kumbiaphp.com\\\/blog\\\/author\\\/nelson-rojas\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol","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:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/","og_locale":"es_ES","og_type":"article","og_title":"Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol","og_description":"\u00bfQu\u00e9 es Scaffolding? Cuando comenz\u00f3 el fen\u00f3meno de los frameworks de desarrollo web, una de sus banderas de lucha&hellip;","og_url":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/","og_site_name":"KumbiaPHP Framework PHP en espa\u00f1ol","article_publisher":"https:\/\/www.facebook.com\/kumbia.fw","article_published_time":"2017-04-03T10:39:38+00:00","article_modified_time":"2020-04-29T23:28:19+00:00","og_image":[{"width":1058,"height":595,"url":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","type":"image\/jpeg"}],"author":"Nelson Rojas","twitter_card":"summary_large_image","twitter_creator":"@nelson955443098","twitter_site":"@kumbiaphp","twitter_misc":{"Escrito por":"Nelson Rojas","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#article","isPartOf":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/"},"author":{"name":"Nelson Rojas","@id":"https:\/\/kumbiaphp.com\/blog\/#\/schema\/person\/f321b5debe6a875d1d1d1154e4502ffb"},"headline":"Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte","datePublished":"2017-04-03T10:39:38+00:00","dateModified":"2020-04-29T23:28:19+00:00","mainEntityOfPage":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/"},"wordCount":797,"commentCount":5,"publisher":{"@id":"https:\/\/kumbiaphp.com\/blog\/#organization"},"image":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","keywords":["crud","ejemplos","scaffold"],"articleSection":["ActiveRecord","PHP","Tutoriales y screencast"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/","url":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/","name":"Scaffolding para CRUD (ABM) sencillos (y no tanto) - primera parte - KumbiaPHP Framework PHP en espa\u00f1ol","isPartOf":{"@id":"https:\/\/kumbiaphp.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#primaryimage"},"image":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#primaryimage"},"thumbnailUrl":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","datePublished":"2017-04-03T10:39:38+00:00","dateModified":"2020-04-29T23:28:19+00:00","breadcrumb":{"@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#primaryimage","url":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","contentUrl":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","width":1058,"height":595,"caption":"Scaffolding para CRUD (ABM) sencillos (y no tanto) \u2013 primera parte"},{"@type":"BreadcrumbList","@id":"https:\/\/kumbiaphp.com\/blog\/2017\/04\/03\/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/kumbiaphp.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte"}]},{"@type":"WebSite","@id":"https:\/\/kumbiaphp.com\/blog\/#website","url":"https:\/\/kumbiaphp.com\/blog\/","name":"KumbiaPHP Framework PHP en espa\u00f1ol","description":"Web &amp; app MVC PHP framework","publisher":{"@id":"https:\/\/kumbiaphp.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kumbiaphp.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kumbiaphp.com\/blog\/#organization","name":"KumbiaPHP Framework PHP en espa\u00f1ol","url":"https:\/\/kumbiaphp.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kumbiaphp.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2015\/02\/logo.png","contentUrl":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2015\/02\/logo.png","width":432,"height":50,"caption":"KumbiaPHP Framework PHP en espa\u00f1ol"},"image":{"@id":"https:\/\/kumbiaphp.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kumbia.fw","https:\/\/x.com\/kumbiaphp"]},{"@type":"Person","@id":"https:\/\/kumbiaphp.com\/blog\/#\/schema\/person\/f321b5debe6a875d1d1d1154e4502ffb","name":"Nelson Rojas","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/35b46624735bd8094a5aaef0242fe02dbe01451b909a85608578c09417e38478?s=96&d=mm&r=g","caption":"Nelson Rojas"},"description":"Especialista en c\u00f3digo de programaci\u00f3n y bases de datos, uso de herramientas Open Source, conferencista ocasional.","sameAs":["http:\/\/nelsonrojas.wordpress.com","https:\/\/www.linkedin.com\/in\/nelson-rojas-nu\u00f1ez-888a60239\/","https:\/\/x.com\/nelson955443098","https:\/\/www.youtube.com\/@nelsonrojasnunez"],"url":"https:\/\/kumbiaphp.com\/blog\/author\/nelson-rojas\/"}]}},"jetpack_featured_media_url":"https:\/\/kumbiaphp.com\/blog\/wp-content\/uploads\/2020\/02\/scaffolding.jpg","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/posts\/1288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/comments?post=1288"}],"version-history":[{"count":27,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/posts\/1288\/revisions"}],"predecessor-version":[{"id":2423,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/posts\/1288\/revisions\/2423"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/media\/2300"}],"wp:attachment":[{"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/media?parent=1288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/categories?post=1288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kumbiaphp.com\/blog\/wp-json\/wp\/v2\/tags?post=1288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}