{"id":229806,"date":"2022-11-04T17:25:00","date_gmt":"2022-11-04T14:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229806"},"modified":"2022-11-09T16:27:53","modified_gmt":"2022-11-09T13:27:53","slug":"prototipazione-rapida-introduzione-del-caricamento-automatico","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/prototipazione-rapida-introduzione-del-caricamento-automatico\/","title":{"rendered":"Prototipazione rapida: introduzione del caricamento automatico"},"content":{"rendered":"\n<p>Negli ultimi post, ho seguito il processo per portare un&#8217;idea dal concetto al prototipo.<\/p>\n<p>Certo, ci sono alcune cose che potresti cambiare (e ci sono alcune cose che cambierei riguardo all&#8217;organizzazione delle classi). Ma il punto della serie non \u00e8 quello di esaminare tutte le varie tecniche orientate agli oggetti che possono essere utilizzate per creare una soluzione.<\/p>\n<p>Invece, si tratta di prendere un prototipo e convertirlo in qualcosa di un po&#8217; pi\u00f9 professionale. C&#8217;\u00e8 ancora una cosa che dobbiamo fare, per\u00f2.<\/p>\n<p>In questo momento, includiamo tutti i nostri file tramite le istruzioni require. E questo funziona bene per file di piccole dimensioni, ma l&#8217;introduzione del caricamento automatico insieme agli spazi dei nomi pu\u00f2 rendere l&#8217;applicazione ancora pi\u00f9 pulita.<\/p>\n<p>Ed \u00e8 quello che faremo.<\/p>\n<h3>Presentazione del caricamento automatico<\/h3>\n<p>Ricorda da un post precedente (se l&#8217;hai letto), che il caricamento automatico \u00e8 un&#8217;idea semplice:<\/p>\n<p>Suona benissimo, vero? Ma c&#8217;\u00e8 un avvertimento: devi scrivere il caricatore automatico. PHP non riesce a capirlo da solo.<\/p>\n<p>Ed \u00e8 per questo che sono un fan dell&#8217;assicurarmi che anche i nostri spazi dei nomi seguano una struttura di directory coerente: se si analizza lo spazio dei nomi e il nome del file, \u00e8 relativamente facile creare il percorso del file e caricarlo automaticamente.<\/p>\n<p>Suona confuso? Per prima cosa, diamo un&#8217;occhiata a dove collocheremo il caricatore automatico per quanto riguarda la nostra struttura di directory:<\/p>\n<p>Quindi, aggiorna il file bootstrap del tuo plug-in in modo che <a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-plugin-bootstrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">richieda solo il file del caricatore automatico<\/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>Naturalmente, abbiamo bisogno del caricatore automatico per caricare i nostri file. In sostanza, il modo in cui funziona \u00e8 questo:<\/p>\n<ol>\n<li>separare i componenti del nome del file in entrata (come il percorso della directory e il nome del file),<\/li>\n<li>sostituire eventuali caratteri di sottolineatura con trattini per assicurarsi che il file segua la struttura del nome file della classe,<\/li>\n<li>inizia a costruire il nome del percorso completo (che \u00e8 la directory, il nome del file, ecc.),<\/li>\n<li>scorrere lo spazio dei nomi fino al nome della classe e creare un nome completo per il file,<\/li>\n<li>includerlo nel progetto.<\/li>\n<\/ol>\n<p>\u00c8 semplice, non \u00e8 vero? Se segui uno schema di nomi di file, directory, nome di classe e spazio dei nomi coerente, puoi riutilizzare lo stesso caricatore automatico in qualsiasi progetto.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/4f5087613f01dcb35b7fb5e79c69401d#file-00-autoload-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ecco una copia di un caricatore automatico<\/a> che uso e lo inserisco in quasi tutti i progetti che uso. Vedrai che segue esattamente quanto descritto sopra:<\/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>E con questo, il plugin \u00e8 passato alla versione 1.0.0. Puoi <a href=\"https:\/\/github.com\/tommcfarlin\/three-recent-posts\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">verificarlo su GitHub<\/a> (sia letteralmente che solo per la revisione). E si spera che questo abbia aiutato a camminare attraverso il processo di passaggio dalla prototipazione rapida al concetto all&#8217;interno del concetto di WordPress.<\/p>\n<h2>Messaggi di serie<\/h2>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/prototipazione-rapida-con-wordpress-dal-concetto-al-plug-in\/\" title=\"Prototipazione rapida con WordPress: dal concetto al plug-in\">Prototipazione rapida con WordPress: dal concetto al plug-in<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/prototipazione-rapida-con-wordpress-analisi-concettuale\/\" title=\"Prototipazione rapida con WordPress: analisi concettuale\">Prototipazione rapida con WordPress: analisi concettuale<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/prototipazione-rapida-da-prototipazione-a-codice-parte-1\/\" title=\"Prototipazione rapida: da prototipazione a codice, parte 1\">Prototipazione rapida: da prototipazione a codice, parte 1<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/it\/prototipazione-rapida-dal-prototipo-al-codice-parte-2\/\" title=\"Prototipazione rapida: dal prototipo al codice, parte 2\">Prototipazione rapida: dal prototipo al codice, parte 2<\/a><\/li>\n<li><a href=\"https:\/\/tommcfarlin.com\/introducing-autoloading\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Prototipazione rapida: introduzione del caricamento automatico<\/a><\/li>\n<\/ol>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;introduzione del caricamento automatico in combinazione con gli spazi dei nomi in un plug-in di WordPress pu\u00f2 rendere l&#8217;applicazione ancora pi\u00f9 pulita.<\/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":[918,720,844],"tags":[1168],"class_list":["post-229806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=229806"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/229806\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/220982"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=229806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=229806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=229806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}