{"id":231192,"date":"2022-12-14T16:59:00","date_gmt":"2022-12-14T13:59:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231192"},"modified":"2022-12-14T17:02:45","modified_gmt":"2022-12-14T14:02:45","slug":"wordpress-widgetit-standardeista-alkaen","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-standardeista-alkaen\/","title":{"rendered":"WordPress-widgetit: Standardeista alkaen"},"content":{"rendered":"\n<p>T\u00e4m\u00e4n sarjan tarkoituksena on aloittaa syvempi sukellus ty\u00f6skentelyyn olio-ohjelmoinnin kanssa WordPressin kontekstissa.<\/p>\n<p>Ja koska WordPress Widgets API on yksi oliokeskeisi\u00e4 k\u00e4yt\u00e4nt\u00f6j\u00e4 k\u00e4ytt\u00e4vist\u00e4 sovellusliittymist\u00e4, se on looginen paikka aloittaa. Lis\u00e4ksi se antaa meille joitain perustavanlaatuisia tekniikoita, joita voimme k\u00e4ytt\u00e4\u00e4 tulevaan ty\u00f6h\u00f6n, kun n\u00e4emme, kuinka tulevissa sarjoissa rakennetaan enemm\u00e4n olioprojekteja WordPressiin.<\/p>\n<p>T\u00e4h\u00e4n menness\u00e4 olemme k\u00e4sitelleet seuraavat asiat:<\/p>\n<ol>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-oliolaehtoeinen-laehestymistapa\/\" title=\"WordPress-widgetit: Olio-l\u00e4hestymistapa\">WordPress-widgetit: Olio-l\u00e4hestymistapa<\/a>. Widgets API tarjoaa vankan lakmustestin ja esimerkin siit\u00e4, kuinka p\u00e4\u00e4set alkuun olio-ohjelmoinnin kanssa WordPressiss\u00e4.<\/li>\n<li><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/wordpress-widgetit-tunnista-olio-ohjelmointi\/\" title=\"WordPress-widgetit: Olio-ohjelmoinnin tunnistaminen\">WordPress-widgetit: Olio-ohjelmoinnin tunnistaminen<\/a>. Tavoitteena on varustaa sinut kaikella, mit\u00e4 tarvitset oliol\u00e4ht\u00f6isten k\u00e4yt\u00e4nt\u00f6jen havaitsemiseen.<\/li>\n<\/ol>\n<p>Jos et ole perill\u00e4, nyt on hyv\u00e4 aika tehd\u00e4 se. Ja jos sinulla on, muistat edellisest\u00e4 viestist\u00e4, jonka p\u00e4\u00e4timme seuraavaan huomautukseen:<\/p>\n<blockquote>\n<p>Toisin sanoen, palaamme <strong><a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Widget Boilerplateen<\/a><\/strong> ja aion muuttaa sen nykyiseen tilaan ottamaan k\u00e4ytt\u00f6\u00f6n nykyaikaisemmat PHP-standardit.<\/p>\n<\/blockquote>\n<p>Jotta voimme aloittaa WordPress Widget Boilerplaten p\u00e4ivitt\u00e4misen noudattamaan mainittuja standardeja, meid\u00e4n on teht\u00e4v\u00e4 muutama asia:<\/p>\n<ol>\n<li>luoda haara olemassa olevasta kattilalevyst\u00e4,<\/li>\n<li>asentaa koodin laatuty\u00f6kalut,<\/li>\n<li>varmistaa, ett\u00e4 IDE-tietoj\u00e4rjestelm\u00e4mme on m\u00e4\u00e4ritetty oikein,<\/li>\n<li>ja aloita koodin muokkaaminen mainittujen standardien mukaiseksi.<\/li>\n<\/ol>\n<p>Ja sit\u00e4 aiomme tehd\u00e4 t\u00e4ll\u00e4 postauksella.<\/p>\n<h2>Standardeista alkaen<\/h2>\n<p>Jos olet ollut t\u00e4m\u00e4n sivuston j\u00e4sen jonkin aikaa, tied\u00e4t, ett\u00e4 k\u00e4yt\u00e4n mieluummin Visual Studio Codea. Jos ei, minulla on <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/visual-studio-code\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">koko joukko artikkeleita, jotka on<\/a><\/strong> omistettu siihen, miten k\u00e4yt\u00e4n sit\u00e4 (ja siten kuinka k\u00e4yt\u00e4mme sit\u00e4 koko t\u00e4m\u00e4n viestisarjan ajan).<\/p>\n<p>Ja jos olet kiinnostunut koodausstandardeista, virheenkorjauksesta, IDE:ist\u00e4, kehitysymp\u00e4rist\u00f6ist\u00e4 ja niin edelleen liittyvist\u00e4 kattavuudesta, tutustu <strong><a href=\"https:\/\/tommcfarlin.com\/tag\/the-independent-wordpress-developer\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">The Independent WordPress Developeriin<\/a><\/strong>.<\/p>\n<p>Oletan kuitenkin, ett\u00e4 jos luet t\u00e4t\u00e4, olet lukenut yll\u00e4 olevan materiaalin l\u00e4pi tai voit k\u00e4yd\u00e4 l\u00e4pi kaiken yll\u00e4 olevan materiaalin.<\/p>\n<p>T\u00e4m\u00e4n sanottuaan aloitetaan.<\/p>\n<h3>Varaston lataaminen<\/h3>\n<p>Ensimm\u00e4inen asia, jonka haluat tehd\u00e4, on kloonata kopio arkistosta. Teen t\u00e4m\u00e4n mieluummin komentorivin kautta.<\/p>\n<p>Lis\u00e4ksi mielest\u00e4ni kannattaa tehd\u00e4 niin <strong><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/lisaeosien-ja-teemojen-kehittaeminen-wordpress-runkoa-vastaan\/\" title=\"WordPressin uusinta versiota\">WordPressin uusinta versiota<\/a><\/strong> vastaan. Jos sinulla ei ole kopiota Subversionin WordPressin runkokopiosta, voit lukea sen m\u00e4\u00e4ritt\u00e4misest\u00e4 t\u00e4\u00e4lt\u00e4. t\u00e4m\u00e4 on kuitenkin t\u00e4ysin vapaaehtoista. Voit seurata t\u00e4m\u00e4n opetusohjelman muuta osaa mill\u00e4 tahansa haluamallasi WordPress-versiolla.<\/p>\n<p>Tehd\u00e4 niin,<\/p>\n<ol>\n<li>Varmista, ett\u00e4 olet WordPress-asennuksesi <strong>plugins -hakemistossa<\/strong><\/li>\n<li>Ja sitten kirjoita seuraavat komennot p\u00e4\u00e4telaitteen kopioon<\/li>\n<\/ol>\n<pre><code>$ <\/code><\/pre>\n<p>T\u00e4m\u00e4 luo <strong>WordPress-Widget-Boilerplate-<\/strong> hakemiston <strong>laajennushakemistoosi<\/strong>. Voit navigoida siihen yksinkertaisesti kirjoittamalla:<\/p>\n<pre><code>$ cd WordPress-Widget-Boilerplate<\/code><\/pre>\n<p>Arkiston kloonauksen tulosten pit\u00e4isi n\u00e4ytt\u00e4\u00e4 t\u00e4lt\u00e4:<\/p>\n<p>Seuraavaksi sinun on varmistettava, ett\u00e4 vaihdat <strong>luomaani<\/strong> kehityshaaraan. T\u00e4m\u00e4n tekeminen on todella helppoa. Mutta ennen kuin teemme sen, miksi et m\u00e4\u00e4rit\u00e4 projektia Visual Studiossa?<\/p>\n<h3>Visual Studio Coden m\u00e4\u00e4ritt\u00e4minen<\/h3>\n<p>Vaiheet projektin m\u00e4\u00e4ritt\u00e4miseksi Visual Studio Codessa ovat yksinkertaisia:<\/p>\n<ol>\n<li>Ved\u00e4 Boilerplaten hakemisto IDE:hen,<\/li>\n<li>Avaa integroitu p\u00e4\u00e4te,<\/li>\n<li>Vaihda oksat<\/li>\n<\/ol>\n<p>Aivan kuten olen tehnyt yll\u00e4, annan n\u00e4ytt\u00f6l\u00e4hetyksen siit\u00e4, kuinka t\u00e4m\u00e4 kaikki tehd\u00e4\u00e4n. Hakemiston vet\u00e4minen Visual Studio Code -koodiin pit\u00e4isi olla riitt\u00e4v\u00e4n helppoa, mutta haarojen vaihtaminen komentorivill\u00e4 voi olla hieman erilaista.<\/p>\n<p>Ensin projektin m\u00e4\u00e4ritt\u00e4minen Visual Studio Codessa:<\/p>\n<\/p>\n<p>Huomaa t\u00e4ss\u00e4, ett\u00e4 avaan my\u00f6s integroidun p\u00e4\u00e4tteen painamalla CMD+P-pikakuvaketta (olen macOS:ss\u00e4, joten pikakuvake voi olla erilainen). Sitten annan komennon tarkistaaksesi <strong>kehityshaan<\/strong>.<\/p>\n<p>Kun olet tehnyt t\u00e4m\u00e4n, paikallisen arkiston pit\u00e4isi vaihtaa kehityshaaraan. Voit vahvistaa, ett\u00e4 kyseess\u00e4 on haara, jota ty\u00f6skentelet kirjoittamalla:<\/p>\n<pre><code>$ git branch<\/code><\/pre>\n<p>Tarkista sitten p\u00e4\u00e4tteen sis\u00e4lt\u00f6. Tarkkaan ottaen <strong>kehitt\u00e4mist\u00e4<\/strong> tulisi korostaa.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e7262e24cf5.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e7262e24cf5.png\" alt=\"WordPress-widgetit: Standardeista alkaen\"><\/a><\/p>\n<p>T\u00e4ss\u00e4 vaiheessa aiomme tuoda projektiin muutamia uusia tiedostoja. T\u00e4m\u00e4n opetusohjelman lopussa voit muodostaa <strong>vedon<\/strong> saadaksesi kaiken, mit\u00e4 aion dokumentoida t\u00e4nne. Mutta koska toimintamme tarkoitus on kaksijakoinen, on t\u00e4rke\u00e4\u00e4 varmistaa, ett\u00e4 teemme t\u00e4m\u00e4n oikeassa j\u00e4rjestyksess\u00e4, koska ensimm\u00e4inen askel on jotain, jota k\u00e4yt\u00e4n jokaisessa WordPress-projektissa t\u00e4ll\u00e4 hetkell\u00e4.<\/p>\n<p>Joten t\u00e4m\u00e4n sanottua, katsotaanpa.<\/p>\n<h3>S\u00e4velt\u00e4j\u00e4 ja koodin laatu<\/h3>\n<p>Ensimm\u00e4inen asia, jonka haluan tehd\u00e4, on luoda sarja ty\u00f6kaluja koodin laadun valvomiseksi. T\u00e4m\u00e4 saavutetaan useilla Composer-paketteilla. N\u00e4m\u00e4 sis\u00e4lt\u00e4v\u00e4t:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/phpro\/grumphp\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">GrumPHP<\/a>. PHP-koodilaatuinen ty\u00f6kalu. \u00c4l\u00e4 aliarvioi selkeytt\u00e4 ja sit\u00e4, miss\u00e4 m\u00e4\u00e4rin t\u00e4m\u00e4 arkisto on t\u00e4ynn\u00e4 tietoa. Jos joskus j\u00e4\u00e4t jumiin johonkin muuhun t\u00e4ss\u00e4 mainittuun ty\u00f6kaluun, lue ensin t\u00e4m\u00e4n arkiston dokumentaatio.<\/li>\n<li><a href=\"https:\/\/github.com\/FriendsOfPHP\/PHP-CS-Fixer\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP CS Fixer<\/a>. Ty\u00f6kalu PHP-koodausstandardien ongelmien automaattiseen korjaamiseen.<\/li>\n<li><strong><a href=\"https:\/\/github.com\/JakubOnderka\/PHP-Parallel-Lint\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP Parallel Lint<\/a><\/strong>. T\u00e4m\u00e4 ty\u00f6kalu tarkistaa PHP-tiedostojen syntaksin nopeammin kuin sarjatarkistus hienommalla l\u00e4hd\u00f6ll\u00e4.<\/li>\n<li><a href=\"https:\/\/phpmd.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPMD<\/a>. T\u00e4m\u00e4 apuohjelma k\u00e4ytt\u00e4\u00e4 tietyn PHP-l\u00e4hdekoodipohjan ja etsii useita mahdollisia ongelmia kyseisess\u00e4 l\u00e4hteess\u00e4<\/li>\n<li><a href=\"https:\/\/github.com\/nikic\/PHP-Parser\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHP j\u00e4sent\u00e4j\u00e4<\/a>. J\u00e4sent\u00e4j\u00e4 on hy\u00f6dyllinen <a href=\"https:\/\/en.wikipedia.org\/wiki\/Static_program_analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">staattiseen analyysiin<\/a>, koodin k\u00e4sittelyyn ja periaatteessa kaikkiin muihin koodia ohjelmallisesti k\u00e4sitteleviin sovelluksiin.<\/li>\n<li><a href=\"https:\/\/github.com\/Ocramius\/ProxyManager\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">V\u00e4lityspalvelimen hallinta<\/a>. T\u00e4m\u00e4n kirjaston tarkoituksena on tarjota abstraktio erilaisten v\u00e4lityspalvelinluokkien luomiseen.<\/li>\n<\/ul>\n<p>Haluan olla selv\u00e4 kahdesta asiasta:<\/p>\n<ol>\n<li>Yll\u00e4 olevat ty\u00f6kalut ovat k\u00e4ytt\u00e4m\u00e4ni v\u00e4himm\u00e4ism\u00e4\u00e4r\u00e4, ja tulet todenn\u00e4k\u00f6isesti k\u00e4ytt\u00e4m\u00e4\u00e4n muita ty\u00f6kaluja tulevaisuudessa,<\/li>\n<li>yll\u00e4 olevat ty\u00f6kalut auttavat valvomaan koodin laatus\u00e4\u00e4nt\u00f6j\u00e4 ennen koodin tarkistamista arkistoon. Sen on tarkoitus t\u00e4ydent\u00e4\u00e4 IDE:n asetuksia.<\/li>\n<\/ol>\n<p>Jotta n\u00e4m\u00e4 ty\u00f6kalut saadaan k\u00e4ytt\u00f6\u00f6n ja toimimaan projektin sis\u00e4ll\u00e4, meid\u00e4n on luotava <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c75e37f2ca15035013477c77ac3a18a6#file-00-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a><\/strong> <strong>n\u00e4ytt\u00e4v\u00e4 composer.json<\/strong> &#8211; tiedosto :<\/p>\n<pre><code>{\n    \"name\": \"wordpress-widget-boilerplate\/wordpress-widget-boilerplate\",\n    \"description\": \"An organized, maintainable boilerplate for building widgets using WordPress best practices.\",\n    \"type\": \"wordpress-plugin\",\n    \"license\": \"GPL-3.0-or-later\",\n    \"homepage\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\",\n    \"authors\": [\n      {\n        \"name\": \"Tom McFarlin\",\n        \"email\": \"tom@pressware.co\",\n        \"homepage\": \"https:\/\/pressware.co\"\n      }\n    ],\n    \"support\": {\n      \"issues\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/issues\"\n    },\n    \"config\": {\n      \"preferred-install\": \"dist\",\n      \"platform\": {\n          \"php\": \"7.1\"\n      }\n    },\n    \"repositories\": [\n      {\n        \"type\": \"composer\",\n        \"url\": \"https:\/\/wpackagist.org\"\n      }\n    ],\n    \"require\": {\n      \"php\": \"7.1\",\n      \"composer\/installers\": \"^1.4\"\n    },\n    \"require-dev\": {\n        \"friendsofphp\/php-cs-fixer\": \"^2.13.1\",\n        \"jakub-onderka\/php-parallel-lint\": \"^1.0.0\",\n        \"phpmd\/phpmd\": \"^v2.6.0\",\n        \"nikic\/php-parser\": \"^4.0\",\n        \"ocramius\/proxy-manager\": \"^2.0.0\",\n        \"phpro\/grumphp\": \"^0.13.1\"\n    },\n    \"scripts\": {\n      \"test\": [\n        \".\/vendor\/bin\/grumphp run\"\n      ]\n    },\n    \"minimum-stability\": \"stable\"\n  }<\/code><\/pre>\n<p>Muista, ett\u00e4 voit vet\u00e4\u00e4 t\u00e4m\u00e4n alas manuaalisesti t\u00e4m\u00e4n viestin lopussa. Jos kuitenkin haluat seurata mukana, voit tehd\u00e4 t\u00e4m\u00e4n manuaalisesti. En koskaan haluaisi lannistaa sinua siit\u00e4. \ud83d\ude42<\/p>\n<p>Kun olet luonut <strong>composer.json<\/strong> &#8211; tiedoston, sinun kannattaa varmistaa, ett\u00e4 suoritat seuraavan komennon p\u00e4\u00e4tteest\u00e4:<\/p>\n<pre><code>$ composer install<\/code><\/pre>\n<p>T\u00e4m\u00e4 voi kest\u00e4\u00e4 jonkin aikaa; Kuitenkin, kun se on tehty, sinulle pit\u00e4isi n\u00e4ytt\u00e4\u00e4 seuraava viesti:<\/p>\n<blockquote>\n<p>Varo! GrumPHP haistaa sitoumuksesi!<\/p>\n<\/blockquote>\n<p>Anna sen kuivaajon kirjoittamalla seuraava komento terminaaliin:<\/p>\n<pre><code>$ vendor\/bin\/grumphp run<\/code><\/pre>\n<p>Riippuen siit\u00e4, miten ty\u00f6skentelet projektin kanssa, saatat n\u00e4hd\u00e4 tulosteen, joka n\u00e4ytt\u00e4\u00e4 suunnilleen t\u00e4lt\u00e4:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e72631d3f32.gif\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e72631d3f32.gif\" alt=\"WordPress-widgetit: Standardeista alkaen\"><\/a><\/p>\n<p>Mutta ty\u00f6t\u00e4 on enemm\u00e4n. Nimitt\u00e4in meid\u00e4n on:<\/p>\n<ul>\n<li>p\u00e4ivitt\u00e4\u00e4 <strong>.gitignore-<\/strong> tiedostomme,<\/li>\n<li>esittele GrumPHP:n asetukset<\/li>\n<li>esittele PHPMD-asetukset,<\/li>\n<li>esitell\u00e4 PHPCS-m\u00e4\u00e4ritykset,<\/li>\n<li>lopuksi rakentele uudelleen kattilalevyn hakemistorakenne.<\/li>\n<\/ul>\n<p>Kaikki viimeiseen vaiheeseen asti, pyrimme tekem\u00e4\u00e4n t\u00e4ss\u00e4 viestiss\u00e4.<\/p>\n<h3>Ohita-tiedoston p\u00e4ivitt\u00e4minen<\/h3>\n<p>Ensinn\u00e4kin emme halua sitoa toimittajahakemistoa tai s\u00e4velt\u00e4j\u00e4n lukitustiedostoa. N\u00e4m\u00e4 voidaan luoda aina, kun k\u00e4ytt\u00e4j\u00e4 lataa hakemiston. Ne voivat helposti pudota tahdista ja lis\u00e4\u00e4v\u00e4t valtavasti projektin hakemistoon.<\/p>\n<p>T\u00e4t\u00e4 varten <strong>gitignore-<\/strong> tiedostosi pit\u00e4isi n\u00e4ytt\u00e4\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c75e37f2ca15035013477c77ac3a18a6#file-01-gitignore-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">t\u00e4lt\u00e4<\/a><\/strong> :<\/p>\n<pre><code>*.DS_Store\n*.log\nwp-config.php\nwp-content\/advanced-cache.php\nwp-content\/backup-db\/\nwp-content\/backups\/\nwp-content\/blogs.dir\/\nwp-content\/cache\/\nwp-content\/upgrade\/\nwp-content\/uploads\/\nwp-content\/mu-plugins\/\nwp-content\/wp-cache-config.php\nwp-content\/plugins\/hello.php\n\n\/.htaccess\n\/license.txt\n\/readme.html\n\/sitemap.xml\n\/sitemap.xml.gz\n\nvendor\/\ncomposer.lock<\/code><\/pre>\n<p>T\u00e4m\u00e4 k\u00e4skee laajennuksen ohittamaan kaiken paitsi sen, mik\u00e4 on laajennushakemiston juurissa (ja jotkin mahdollisesti luoduista hakemistoista) sek\u00e4 joitain perustiedostoja, joita olemme tottuneet n\u00e4kem\u00e4\u00e4n WordPress-asennuksissa.<\/p>\n<p>Jotkut n\u00e4kemist\u00e4si, kuten <strong>wp-config.php<\/strong> tai <strong>wp-content\/backups<\/strong>, joita et todenn\u00e4k\u00f6isesti koskaan n\u00e4e laajennuksen yhteydess\u00e4, mutta n\u00e4m\u00e4 ovat tavallisia WordPressin huomiotta j\u00e4tt\u00e4vi\u00e4 ohjeita, jotka haluan pit\u00e4\u00e4 k\u00e4den ulottuvilla.<\/p>\n<p>Huomaat, ett\u00e4 olen lis\u00e4nnyt my\u00f6s <strong>toimittajan\u00a0<\/strong> ja s\u00e4velt\u00e4j\u00e4n lukitustiedoston tiedoston alaosaan.<\/p>\n<h3>M\u00e4\u00e4rit\u00e4 GrumPHP<\/h3>\n<p>GrumPHP voi tehd\u00e4 paljon, ja jos vietit aikaa arkiston tutkimiseen ennen kuin olet lukenut t\u00e4h\u00e4n asti, tied\u00e4t sen todenn\u00e4k\u00f6isesti; Aion kuitenkin pit\u00e4\u00e4 sen mahdollisimman v\u00e4h\u00e4rasvaisena, joten se tarjoaa k\u00e4ytt\u00e4millemme ty\u00f6kaluille tarvitsemansa ohjeet <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c75e37f2ca15035013477c77ac3a18a6#file-02-grumphp-yml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">eik\u00e4 mit\u00e4\u00e4n muuta<\/a><\/strong>.<\/p>\n<pre><code>parameters:\n    git_dir: .git\n    bin_dir: vendor\/bin\n    process_timeout: 120\n    tasks:\n      securitychecker:\n      composer:\n      jsonlint:\n      xmllint:\n      yamllint:\n      phplint:\n        exclude:\n          - vendor\/\n      phpcs:\n        metadata:\n          priority: 200\n      phpcsfixer2:\n        allow_risky: true\n        config: '.php_cs.dist'\n        metadata:\n          priority: 300\n      phpparser:\n        visitors:\n          forbidden_function_calls:\n            blacklist:\n              - \"exit\"\n              - \"var_dump\"\n      phpversion:\n        project: '7.1'\n      phpmd:\n        exclude: ['vendor']\n        ruleset: ['phpmd.xml']<\/code><\/pre>\n<p>Lyhyesti sanottuna t\u00e4ss\u00e4 sanotaan suorittavan erilaisia \u200b\u200btarkistuksia:<\/p>\n<ul>\n<li>turvallisuus,<\/li>\n<li>s\u00e4velt\u00e4j\u00e4,<\/li>\n<li>JSON,<\/li>\n<li>XML,<\/li>\n<li>Jaml,<\/li>\n<li>PHP,<\/li>\n<li>PHPCS,<\/li>\n<li>PHP j\u00e4sent\u00e4j\u00e4,<\/li>\n<li>PHPMD,<\/li>\n<li>ja enemm\u00e4n.<\/li>\n<\/ul>\n<p>Kun olemme m\u00e4\u00e4ritt\u00e4neet kaiken muun, n\u00e4yt\u00e4n sinulle varmasti, kuinka t\u00e4m\u00e4 kaikki sopii yhteen. Mutta ensin lopetetaan muiden apuohjelmiemme konfigurointi.<\/p>\n<h3>PHPCS<\/h3>\n<p>T\u00e4m\u00e4 k\u00e4ytt\u00e4\u00e4 kahta erillist\u00e4 tiedostoa \u2013 <strong>dist<\/strong> -tiedostoa ja <strong>XML<\/strong> &#8211; tiedostoa \u2013 joista jokainen palvelee erilaisia, vaikkakin eritt\u00e4in hy\u00f6dyllisi\u00e4 tarkoituksia.<\/p>\n<p>Ensimm\u00e4inen tiedosto, <strong>php_cs.dist<\/strong>, jonka n\u00e4et arkistossa t\u00e4m\u00e4n viestin lopussa, tarjoaa otsikon, jota sovelletaan kaikkiin projektimme PHP-tiedostoihin. Se pakottaa my\u00f6s joitain erilaisia \u200b\u200bs\u00e4\u00e4nt\u00f6j\u00e4, jotka parantavat koodin laatua.<\/p>\n<p>S\u00e4\u00e4nn\u00f6t ovat itsest\u00e4\u00e4n selvi\u00e4, ja voit n\u00e4hd\u00e4, mit\u00e4 se panee t\u00e4yt\u00e4nt\u00f6\u00f6n, yksinkertaisesti tarkastelemalla jokaista m\u00e4\u00e4ritetty\u00e4 <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c75e37f2ca15035013477c77ac3a18a6#file-03-phpcs-dist\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">s\u00e4\u00e4nt\u00f6\u00e4<\/a><\/strong>.<\/p>\n<pre><code>&lt;?php\n\n$header = &lt;&lt;&lt;'EOF'\nThis file is part of the WordPress Widget Boilerplate\n(c) Tom McFarlin &lt;tom@tommcfarlin.com&gt;\n\nThis source file is subject to the GPL license that is bundled\nwith this source code in the file LICENSE.\nEOF;\n\nreturn PhpCsFixerConfig::create()\n  -&gt;setRiskyAllowed(true)\n  -&gt;setRules([\n    '@PHP56Migration' =&gt; true,\n    '@Symfony' =&gt; true,\n    '@Symfony:risky' =&gt; true,\n    'align_multiline_comment' =&gt; true,\n    'array_syntax' =&gt; ['syntax' =&gt; 'short'],\n    'blank_line_before_statement' =&gt; true,\n    'combine_consecutive_issets' =&gt; true,\n    'combine_consecutive_unsets' =&gt; true,\n    \/\/ one should use PHPUnit methods to set up expected exception instead of annotations\n    'general_phpdoc_annotation_remove' =&gt; ['annotations' =&gt; ['expectedException', 'expectedExceptionMessage', 'expectedExceptionMessageRegExp']],\n    'header_comment' =&gt; ['header' =&gt; $header],\n    'heredoc_to_nowdoc' =&gt; true,\n    'list_syntax' =&gt; ['syntax' =&gt; 'long'],\n    'method_argument_space' =&gt; ['ensure_fully_multiline' =&gt; true],\n    'method_chaining_indentation' =&gt; false,\n    'no_extra_consecutive_blank_lines' =&gt; ['tokens' =&gt; ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block']],\n    'no_null_property_initialization' =&gt; true,\n    'no_short_echo_tag' =&gt; true,\n    'no_unneeded_curly_braces' =&gt; true,\n    'no_unneeded_final_method' =&gt; true,\n    'no_unreachable_default_argument_value' =&gt; true,\n    'no_useless_else' =&gt; true,\n    'no_useless_return' =&gt; true,\n    'ordered_class_elements' =&gt; true,\n    'ordered_imports' =&gt; true,\n    'php_unit_construct' =&gt; true,\n    'php_unit_test_class_requires_covers' =&gt; true,\n    'php_unit_dedicate_assert' =&gt; true,\n    'phpdoc_add_missing_param_annotation' =&gt; true,\n    'phpdoc_order' =&gt; true,\n    'phpdoc_types_order' =&gt; ['null_adjustment' =&gt; 'always_last'],\n    'semicolon_after_instruction' =&gt; true,\n    'single_line_comment_style' =&gt; true,\n    'visibility_required' =&gt; ['const', 'property', 'method'],\n    'yoda_style' =&gt; true,\n  ])\n  -&gt;setFinder(\n    PhpCsFixerFinder::create()\n      -&gt;exclude(__DIR__. '\/vendor\/*')\n      -&gt;in([\n        __DIR__. '\/src'\n      ])) ;<\/code><\/pre>\n<p>Seuraavaksi haluat my\u00f6s luoda XML-tiedoston t\u00e4ydent\u00e4m\u00e4\u00e4n yll\u00e4 olevaa tiedostoa. Huomaat, ett\u00e4 toimittamassani tiedostossa k\u00e4yt\u00e4n t\u00e4t\u00e4 ty\u00f6ss\u00e4ni <strong><a href=\"https:\/\/pressware.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Presswarella<\/a><\/strong>. Lis\u00e4ksi se my\u00f6s kuittaa <strong>testihakemiston<\/strong>.<\/p>\n<p>T\u00e4ll\u00e4 hetkell\u00e4 meill\u00e4 ei ole kirjoitettuja yksikk\u00f6testej\u00e4, mutta jos p\u00e4\u00e4t\u00e4t sis\u00e4llytt\u00e4\u00e4 ne widgetiin, t\u00e4m\u00e4 on valmis k\u00e4sittelem\u00e4\u00e4n ne oikein.<\/p>\n<pre><code>&lt;?xml version=\"1.0\"?&gt;\n&lt;ruleset name=\"Pressware\"&gt;\n    &lt;description&gt;Pressware, LLC Coding Standards&lt;\/description&gt;\n\n    &lt;!-- Scan all files in directory --&gt;\n    &lt;file&gt;.\/src&lt;\/file&gt;\n    &lt;file&gt;.\/tests&lt;\/file&gt;\n    &lt;exclude-pattern&gt;.\/tests\/phpunit\/*&lt;\/exclude-pattern&gt;\n    &lt;!-- Scan only PHP files --&gt;\n    &lt;arg name=\"extensions\" value=\"php\"&gt;&lt;\/arg&gt;\n\n    &lt;!-- Show colors in console --&gt;\n    &lt;arg value=\"-colors\"&gt;&lt;\/arg&gt;\n\n    &lt;!-- Show sniff codes in all reports --&gt;\n    &lt;arg value=\"ns\"&gt;&lt;\/arg&gt;\n\n    &lt;!-- Use PSR-2 as a base --&gt;\n    &lt;rule ref=\"PSR2\"&gt;&lt;\/rule&gt;\n    &lt;rule ref=\"Generic.Arrays.DisallowLongArraySyntax.Found\" &gt;&lt;\/rule&gt;\n\n    &lt;!-- Force 2 spaces indentation --&gt;\n    &lt;rule ref=\"Generic.WhiteSpace.ScopeIndent\"&gt;\n        &lt;properties&gt;\n            &lt;property name=\"indent\" value=\"4\"&gt;&lt;\/property&gt;\n            &lt;property name=\"tabIndent\" value=\"false\"&gt;&lt;\/property&gt;\n        &lt;\/properties&gt;\n    &lt;\/rule&gt;\n&lt;\/ruleset&gt;<\/code><\/pre>\n<p>M\u00e4\u00e4rit\u00e4n t\u00e4ss\u00e4 vain pienen joukon kokoonpanoja, mutta olen huomannut sen olevan enemm\u00e4n kuin riitt\u00e4v\u00e4 tarpeisiini toistaiseksi. Kun l\u00f6yd\u00e4n lis\u00e4\u00e4 tai p\u00e4\u00e4t\u00e4n k\u00e4ytt\u00e4\u00e4 enemm\u00e4n, aion varmasti p\u00e4ivitt\u00e4\u00e4 sis\u00e4lt\u00f6\u00e4 tulevissa viesteiss\u00e4.<\/p>\n<h3>M\u00e4\u00e4rit\u00e4 PHPMD<\/h3>\n<p>Ja lopuksi meid\u00e4n on m\u00e4\u00e4ritett\u00e4v\u00e4 PHP Mess Detector (tai PHPMD). Onneksi t\u00e4m\u00e4 k\u00e4ytt\u00e4\u00e4 XML-tiedostoa, joka k\u00e4ytt\u00e4\u00e4 Composerin asentaman paketin s\u00e4\u00e4nt\u00f6joukkoja. Meid\u00e4n tarvitsee vain viitata s\u00e4\u00e4nt\u00f6\u00f6n asetustiedostossa.<\/p>\n<p>Toiseksi tarjoamme my\u00f6s pienen poikkeuksen <strong>ShortVariable-<\/strong> nimelle, kuten n\u00e4et <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/c75e37f2ca15035013477c77ac3a18a6#file-05-phpmd-xml\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">seuraavasta sis\u00e4ll\u00f6st\u00e4<\/a><\/strong> :<\/p>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\" ?&gt;\n&lt;ruleset\n    name=\"VersionEyeModule rules\"\n    xmlns=\"http:\/\/pmd.sf.net\/ruleset\/1.0.0\"\n    xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n    xsi:schemaLocation=\"http:\/\/pmd.sf.net\/ruleset\/1.0.0 http:\/\/pmd.sf.net\/ruleset_xml_schema.xsd\"\n    xsi:noNamespaceSchemaLocation=\"http:\/\/pmd.sf.net\/ruleset_xml_schema.xsd\"\n&gt;\n    &lt;rule ref=\"rulesets\/cleancode.xml\" &gt;&lt;\/rule&gt;\n    &lt;rule ref=\"rulesets\/codesize.xml\" &gt;&lt;\/rule&gt;\n    &lt;rule ref=\"rulesets\/controversial.xml\" &gt;&lt;\/rule&gt;\n    &lt;rule ref=\"rulesets\/design.xml\" &gt;&lt;\/rule&gt;\n    &lt;rule ref=\"rulesets\/unusedcode.xml\" &gt;&lt;\/rule&gt;\n    &lt;rule ref=\"rulesets\/naming.xml\"&gt;\n        &lt;exclude name=\"ShortVariable\"&gt;&lt;\/exclude&gt;\n    &lt;\/rule&gt;\n\n    &lt;rule ref=\"rulesets\/naming.xml\/ShortVariable\"\n          since=\"0.2\"\n          message=\"Avoid variables with short names like {0}. Configured minimum length is {1}.\"\n          class=\"PHPMDRuleNamingShortVariable\"\n          externalInfoUrl=\"http:\/\/phpmd.org\/rules\/naming.html#shortvariable\"&gt;\n        &lt;priority&gt;3&lt;\/priority&gt;\n        &lt;properties&gt;\n            &lt;property name=\"minimum\" description=\"Minimum length for a variable, property or parameter name\" value=\"3\"&gt;&lt;\/property&gt;\n            &lt;property name=\"exceptions\" value=\"id,q,w,i,j,v,e,f,fp\" &gt;&lt;\/property&gt;\n        &lt;\/properties&gt;\n    &lt;\/rule&gt;\n&lt;\/ruleset&gt;<\/code><\/pre>\n<p>Ja kun kaikki n\u00e4m\u00e4 ovat paikoillaan, meid\u00e4n pit\u00e4isi pysty\u00e4 ajamaan GrumPHP:t\u00e4 uudelleen komentorivilt\u00e4 ja saada hieman erilaiset tulokset.<\/p>\n<h3>GrumPHP k\u00e4ynniss\u00e4 taas<\/h3>\n<p>Kirjoita terminaaliin seuraavat tiedot:<\/p>\n<pre><code>$ vendor\/bin\/grumphp run<\/code><\/pre>\n<p>Ja sinun pit\u00e4isi n\u00e4hd\u00e4 jotain t\u00e4llaista:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e726340729e.gif\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161604-61e726340729e.gif\" alt=\"WordPress-widgetit: Standardeista alkaen\"><\/a><\/p>\n<p>Erilaisia \u200b\u200btuloksia kuin ensimm\u00e4isell\u00e4 kerralla, vai mit\u00e4? T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 rikomme joitain s\u00e4\u00e4nt\u00f6j\u00e4 ja standardeja, jotka ovat nykyaikainen osa PHP:t\u00e4 ja olio-kehityst\u00e4.<\/p>\n<p>Ja sit\u00e4 aiomme siivota seuraavassa postauksessa.<\/p>\n<h2>Tulossa<\/h2>\n<p>Joten mist\u00e4 t\u00e4m\u00e4n oliol\u00e4ht\u00f6isyys tulee? T\u00e4h\u00e4n asti olemme puhuneet Widgets API:n k\u00e4ytt\u00e4misest\u00e4 oliopohjaisena mallina oliokoodin kirjoittamiseen WordPressiss\u00e4.<\/p>\n<p>Jotkut siit\u00e4, mit\u00e4 olemme tehneet t\u00e4h\u00e4n menness\u00e4, ovat olleet juuri sit\u00e4 (puhumalla sen periaatteista, katsomalla, miten se on laadittu, ja paljon muuta).<\/p>\n<p>Mutta kuten mainitsin t\u00e4m\u00e4n viestin alussa, koodin laatuty\u00f6kalujen asettaminen antaa meille ensin perustan, jota voimme k\u00e4ytt\u00e4\u00e4 kattilalevyn uudelleenmuodostamiseen (mik\u00e4 meid\u00e4n on selv\u00e4stikin teht\u00e4v\u00e4 GrumPHP:n osoittaman punaisen m\u00e4\u00e4r\u00e4n vuoksi).<\/p>\n<p>Ja t\u00e4st\u00e4 aloitamme t\u00e4m\u00e4n sarjan seuraavassa postauksessa.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yksi parhaista tavoista harjoittaa olio-ohjelmointia on aloittaa standardeista ja hankkia ty\u00f6kaluja niiden t\u00e4yt\u00e4nt\u00f6\u00f6npanoon.<\/p>\n","protected":false},"author":1,"featured_media":235870,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[719,895,864],"tags":[1166],"class_list":["post-231192","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kehittaejae","category-koodi","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231192"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231192\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/235870"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}