WordPress & Composer pentru autoload-ul claselor

Unul dintre cele mai frustrante lucruri pe care trebuie trebuia să le fac era să includ toate clasele în functions.php (sau, dacă scriam un plugin, în plugin.php). Doar că… se poate și altfel, folosind Composer.

Instalarea Composer

În funcție de cum tratezi proiectul, poți instala composer ori în directorul temei, ori în wp-content. În terminal va trebui doar să scrii composer init și să urmezi pașii. Nu este nevoie să alegi nici un pachet în acest moment, ci doar să ai un composer.json în rădăcina proiectului. După ce ai terminat toți pașii, este nevoie să rulezi și composer install.

Acum, din functions.php va trebui să incluzi vendor/autoload.php. Dacă ai ales instalarea în wp-content, va trebui să îl incluzi așa:

require_once( WP_CONTENT_DIR . '/vendor/autoload.php' );

Dacă îl incluzi din directorul temei, va trebui să-l incluzi așa:

require_once( 'vendor/autoload.php' );

Autoload

Pentru a avea un autoload funcțional, va trebui să mai adaugi ceva în composer.json:

  "autoload": {
    "psr-0": {
      "foo\\": "includes/",
      "bar\\": "includes/"
    }
  }

De asemenea, va trebui să urmezi câteva reguli foarte simple:

  1. Un fișier va conține o singură clasă, indiferent cât de mică e clasa (și ar trebui să fie mică! Ba chiar mai mică de atât!);
  2. Numele fiecărui fișier trebuie să fie același cu numele clasei;
  3. Numele clasei va trebui scris folosind CamelCase (și nu snake_case);
  4. Fiecare clasă va folosi Namespaces;
  5. Fiecare clasă va trebui să urmeze același format și în namespace și în file system
  6. După adăugarea/ștergerea unui namespace nou în composer.json va trebui să rulezi composer install

Scurt exemplu

<?php 
// includes\foo\AutoloadedClass.php
namespace foo;
class AutoloadedClass {}
?>
<?php 
// includes\bar\baz\AutoloadedClass.php
namespace bar\baz;
class AutoloadedClass {}
?>

Din functions.php (și cam de oriunde din temă de fapt), voi putea rula new foo\AutoloadedClass fără a fi nevoie să fac vreun alt require decât cel menționat mai sus.

8 Comentarii to “WordPress & Composer pentru autoload-ul claselor”

  1. Singura problema cu exemplul dat sunt namespace-urile. Daca e o tema pe care nu o s-o folosesti doar tu, WordPress suporta PHP 5.2.4 iar namespace-urile sunt de la 5.3 incolo, deci momentan nu sunt safe.

  2. Ionuț Staicu

    @C: comform ultimelor statistici, PHP 5.2.x este folosit de vreo 15% din utilizatorii de WordPress. Acum, că această versiune a devenit un fel de IE6 e o treabă; că alegi tu să suporți o versiune ce nu mai primește update-uri de câțiva ani e o altă treabă :)

  3. Ce parere ai de un WordPress + Laravel ?

  4. De ce ai vrea să faci asta?

  5. Mi-a cerut un client treaba asta, el are deja un site care ruleaza pe WordPress si mi-a spus ca partea de back-end ar vrea sa fie facuta cu Laravel, Lumen stiu ca se poate integra chiar in teme de wp iar laravelu poate fi folosit pe partea de back-end. Nu stiu daca se merita dpdv al vitezei site-ului si ce avantaje ar avea clientul daca el vrea treaba asta… Eu unul sincer nu vad vreun avantaj in toata treaba asta… Ba chiar mi se pare ca se complica asa

  6. L-ai întrebat și care ar fi motivele?

  7. Singurul motiv invocat de el a fost ca e familiarizat sa il ruleze asa… And I said ok then…

  8. Foarte drăguț din partea lui :)

    Caută-ți alt client. :D

Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>