{"id":229147,"date":"2022-11-04T16:57:00","date_gmt":"2022-11-04T13:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229147"},"modified":"2022-11-09T05:42:33","modified_gmt":"2022-11-09T02:42:33","slug":"creacion-rapida-de-prototipos-introduccion-a-la-carga-automatica","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/creacion-rapida-de-prototipos-introduccion-a-la-carga-automatica\/","title":{"rendered":"Creaci\u00f3n r\u00e1pida de prototipos: Introducci\u00f3n a la carga autom\u00e1tica"},"content":{"rendered":"\n<p>En las \u00faltimas publicaciones, he recorrido el proceso de llevar una idea del concepto al prototipo.<\/p>\n<p>Por supuesto, hay algunas cosas que podr\u00edas cambiar (y hay algunas cosas que yo cambiar\u00eda con respecto a la organizaci\u00f3n de clases). Pero el objetivo de la serie no es recorrer todas las diversas t\u00e9cnicas orientadas a objetos que se pueden usar para crear una soluci\u00f3n.<\/p>\n<p>En cambio, se trata de tomar un prototipo y convertirlo en algo un poco m\u00e1s profesional. Sin embargo, todav\u00eda hay una cosa que tenemos que hacer.<\/p>\n<p>En este momento, incluimos todos nuestros archivos a trav\u00e9s de declaraciones requeridas. Y esto funciona bien para archivos peque\u00f1os, pero la introducci\u00f3n de la carga autom\u00e1tica junto con los espacios de nombres puede hacer que la aplicaci\u00f3n sea a\u00fan m\u00e1s limpia.<\/p>\n<p>Y eso es lo que vamos a hacer.<\/p>\n<h3>Introducci\u00f3n a la carga autom\u00e1tica<\/h3>\n<p>Recuerda de una publicaci\u00f3n anterior (si la has le\u00eddo), que la carga autom\u00e1tica es una idea simple:<\/p>\n<p>Suena genial, \u00bfverdad? Pero hay una advertencia: debe escribir el cargador autom\u00e1tico. PHP no puede resolverlo por s\u00ed solo.<\/p>\n<p>Y es por eso que me encanta asegurarme de que nuestros espacios de nombres tambi\u00e9n sigan una estructura de directorio consistente: si analiza el espacio de nombres y el nombre del archivo, es relativamente f\u00e1cil crear la ruta al archivo y cargarlo autom\u00e1ticamente.<\/p>\n<p>\u00bfSuena confuso? Primero, echemos un vistazo a d\u00f3nde colocaremos el cargador autom\u00e1tico con respecto a nuestra estructura de directorios:<\/p>\n<p>A continuaci\u00f3n, actualice el archivo de arranque de su complemento para que solo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-plugin-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">requiera el archivo de carga autom\u00e1tica<\/a>.<\/p>\n<pre><code>&lt;?php\n\/**\n * Three Recent Posts\n *\n * @package     TRP\n * @author      Tom McFarlin\n * @copyright   2017 Tom McFarlin\n * @license     MIT\n *\n * @wordpress-plugin\n * Plugin Name: Three Recent Posts\n * Plugin URI:  https:\/\/tommcfarlin.com\/three-recent-posts\/\n * Description: Displays the three mot recent posts in your post editor screen.\n * Version:     1.0.0\n * Author:      Tom McFarlin\n * Author URI:  https:\/\/tommcfarlin.com\n * Text Domain: three-recent-posts\n * License:     GPL\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\/\n\nnamespace McFarlinTRP;\nuse McFarlinTRPDisplayMeta_Box;\n\n\/\/ Import the autoloader.\ninclude_once 'Includes\/autoload.php';\n\nadd_action( 'add_meta_boxes', __NAMESPACE__. 'trp_start' );\n\/**\n * Starts the plugin.\n *\/\nfunction trp_start() {\n\n    $meta_box = new Meta_Box( dirname( __FILE__) );\n    $meta_box-&gt;init();\n}\n<\/code><\/pre>\n<p>Por supuesto, necesitamos el cargador autom\u00e1tico para cargar nuestros archivos. Esencialmente, la forma en que funciona es esta:<\/p>\n<ol>\n<li>separar los componentes del nombre del archivo entrante (como la ruta del directorio y el nombre del archivo),<\/li>\n<li>reemplace los guiones bajos con guiones para asegurarse de que el archivo siga la estructura del nombre de archivo de la clase,<\/li>\n<li>comience a construir el nombre de la ruta completa (que es el directorio, el nombre del archivo, etc.),<\/li>\n<li>iterar a trav\u00e9s del espacio de nombres hasta el nombre de la clase y crear un nombre completo para el archivo,<\/li>\n<li>incluirlo en el proyecto.<\/li>\n<\/ol>\n<p>Es sencillo, \u00bfno? Si sigue un espacio de nombres, un directorio, un nombre de clase y un esquema de nomenclatura de archivos consistentes, puede reutilizar el mismo cargador autom\u00e1tico en cualquier proyecto.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-autoload-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Aqu\u00ed hay una copia de un cargador autom\u00e1tico<\/a> que uso y lo coloco en casi cualquier proyecto que uso. Ver\u00e1s que sigue exactamente lo que se cubre arriba:<\/p>\n<pre><code>&lt;?php\n\/**\n * Automatically loads the specified file.\n *\n * @package McFarlinTFP\n *\/\n\nnamespace McFarlinTFP;\n\n\/**\n * Automatically loads the specified file.\n *\n * Examines the fully qualified class name, separates it into components, then creates\n * a string that represents where the file is loaded on disk.\n *\n * @package McFarlinTFP;\n *\/\nspl_autoload_register(function( $filename) {\n\n    \/\/ First, separate the components of the incoming file.\n    $file_path = explode( '', $filename );\n\n    \/\/ Get the last index of the array. This is the class we're loading.\n    if (isset( $file_path[ count( $file_path) - 1 ])) {\n\n        $class_file = strtolower(\n            $file_path[ count( $file_path) - 1 ]\n        );\n\n        \/**\n         * The classname has an underscore, so we need to replace it\n         * with a hyphen for the file name.\n         *\/\n        $class_file = str_ireplace( '_', '-', $class_file );\n        $class_file = \"class-$class_file.php\";\n    }\n\n    \/**\n     * Find the fully qualified path to the class file by iterating through the $file_path array.\n     * We ignore the first index since it's always the top-level package. The last index is always\n     * the file so we append that at the end.\n     *\/\n    $fully_qualified_path = trailingslashit(\n        dirname(\n            dirname( __FILE__)) );\n\n    \/**\n     * We start at the second index of the namespace because our directory\n     * structure does not include 'McFarlin\/TRP'.\n     *\/\n    for ($i = 2; $i &lt; count( $file_path) - 1; $i++) {\n\n        $dir = strtolower( $file_path[ $i ] );\n        $fully_qualified_path .= trailingslashit( $dir );\n    }\n    $fully_qualified_path .= $class_file;\n\n    \/\/ Now we include the file.\n    if (file_exists( $fully_qualified_path)) {\n        include_once( $fully_qualified_path );\n    }\n});<\/code><\/pre>\n<p>Y con esto, el complemento est\u00e1 listo para la versi\u00f3n 1.0.0. Puede <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">consultarlo en GitHub<\/a> (tanto literalmente como solo para revisi\u00f3n). Y con suerte, esto ha ayudado a recorrer el proceso de pasar de la creaci\u00f3n r\u00e1pida de prototipos al concepto dentro del concepto de WordPress.<\/p>\n<h2>Publicaciones de la serie<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/creacion-rapida-de-prototipos-con-wordpress-del-concepto-al-complemento\/\" title=\"Creaci\u00f3n r\u00e1pida de prototipos con WordPress: del concepto al complemento\">Creaci\u00f3n r\u00e1pida de prototipos con WordPress: del concepto al complemento<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/prototipos-rapidos-con-wordpress-analisis-de-concepto\/\" title=\"Prototipos R\u00e1pidos con WordPress: An\u00e1lisis de Concepto\">Prototipos R\u00e1pidos con WordPress: An\u00e1lisis de Concepto<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/creacion-rapida-de-prototipos-prototipo-a-codigo-parte-1\/\" title=\"Creaci\u00f3n r\u00e1pida de prototipos: Prototipo a c\u00f3digo, Parte 1\">Creaci\u00f3n r\u00e1pida de prototipos: Prototipo a c\u00f3digo, Parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/es\/creacion-rapida-de-prototipos-de-prototipo-a-codigo-parte-2\/\" title=\"Creaci\u00f3n r\u00e1pida de prototipos: de prototipo a c\u00f3digo, parte 2\">Creaci\u00f3n r\u00e1pida de prototipos: de prototipo a c\u00f3digo, parte 2<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/introducing-autoloading\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Creaci\u00f3n r\u00e1pida de prototipos: Introducci\u00f3n a la carga autom\u00e1tica<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La introducci\u00f3n de la carga autom\u00e1tica junto con los espacios de nombres en un complemento de WordPress puede hacer que la aplicaci\u00f3n sea a\u00fan m\u00e1s limpia.<\/p>\n","protected":false},"author":1,"featured_media":220982,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,914,840],"tags":[1172],"class_list":["post-229147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-otro","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229147"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229147\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/220982"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}