Ite non depet mancare in unu progetu PHP

Ite non depet mancare in unu progetu PHP

Còdighe PHP

Annos a oe PHP fiat cunsideradu pagu prus de unu gioghiteddu, unu linguàgiu fàtzile pro fàghere prus a lestru unu muntone de cosa chi una borta boliat fata cun programmas chi impreaiant s'interfache CGI. Custu de ismenguare sa potèntzia oferta dae su linguàgiu at tentu efetos malos meda me is annos, giai chi unu còdighe iscritu male at portadu a progetos atacados cun tècnicas de cracking e essidos malos a ddoe sighire a traballare cando is lìnias de su programma essiant medas. Pro is programmadores noos, andamus a bìdere comente chircare de evitare calicunu de custos problemas, incumentzende bene, chene fàghere unas cantas faddinas fitianas.

Manìgiu de mòllios HTML

Connotos che motores de templating, permitint de separare su còdighe PHP dae su de sa presentada, s'HTML. In custa manera, su progetu est ordinadu, cun totu is bantàgios possìbiles. Traballare a pitzus de su còdighe est prus fàtzile e faghet fintzas a tènnere un'iscuadra chi s'incurat de sa programmatzione e una de s'interfache chi podent traballare in parallelu. Cando bolemus cambiare una parte de su programma no arriscamus de isciusciare s'àtera.
Is motores prus impreados sunt Smarty e Twig. Su traballu faghet a ddu fàghere cun PHP etotu, ma cun unu motore est prus còmodu, fintzas gràtzias is funtziones chi tenimus a disponimentu pro fàghere cussu isceti, e s'interfache est megius isolada dae su programma.

Una libreria pro manigiare sa base de datos

Cando leghimus unu manuale PHP pro sa prima borta imparamus a imbiare pedidas a una base de datos che MySQL/MariaDB cun una tzerriada tipu

$res = mysqli_query($connection, "SELECT * FROM table");

Dae inoghe a sighire impreende custa manera de s'acapiare a MySQL pagu nche bolet. Su problema benit cando in sa pedida SQL depimus impreare datos de s'impitadore, imbiados pro esempru in unu formulàriu (form) HTML. Podet acotèssere de iscrìere una cosa che

"SELECT * FROM users WHERE username = '{$_POST['username']}'"

chi impitadores malos podent isfrutare pro atacos de tipu Inietzione de SQL (SQL Injection).
Una libreria pro sa base de datos at a permìtere a su programmadore de si nd'iscabùllere dae su traballu de iscrìere ònnia pedida a manu e de su perìgulu de faddinas de custu tipu, chi me is annos passados fiant bastante fitianas. Impreare PDO cun pedidas cun paràmetros est giai unu passu a in antis, ma nche nd'at medas àteras chi permitint de manigiare is datos in manera ancora prus còmoda:

// Esempru cun Doctrine:
$user = $entityManager->getRepository('User')->findBy(['username' => $_POST['username']]);

// Esempru cun Eloquent
$user = Class::where('username', $_POST['username'])->first();

Una libreria pro manigiare is formulàrios

Manigiare is formulàrios (o mòdulos, o form) est una de cussas fainas chi ais a fàghere bortas medas e sa secuèntzia de passos est semper sa pròpiu:

  1. iscrìere s'html;
  2. pigare is balores de is vetores $_POST e $_GET;
  3. averiguare chi is balores siant bonos;
  4. si non sunt bonos torrare a coa;
  5. si sunt bonos, ddos impreare me is operatziones chi si serbint.

Balet sa pena, duncas, de chircare una libreria chi fatzat sa parte manna de su traballu pro nois.Sa libreria de Symfony est cumpleta meda e permitit una personalizatzione manna, ma est tropu complicada pro su gustu miu, e arriscat de agiùnghere prus traballu de su chi chircades de bogare. A dolu mannu non nde tèngio àteras de cussigiare ca sa parte manna de is chi apo impreadu ddas aia iscritas deo etotu in pari cun collegas.

Una libreria pro manigiare s'atzessu e is permissos

S'atzessu de is impitadores e is permissos chi tenent (amministradore, collaboradore, moderadore, etc) est un'àtera faina de importu cando iscriemus un'aplicatzione web, e depet èssere fata bene pro evitare atacos, furas de datos e àteras cosas pagu galanas. Pro ite si depimus pigare s'istorbu de dda fàghere de s'incumentzu cando ònnia framework nd'oferit una proada e averiguada dae mìgias de programmadores?

Inietzione de dipendèntzias

Sa tentatzione, cando iscriemus una classe de ogetos est de creare is dipendèntzias de a intro:

class Vetura {
  protected Motore $motore;

  public function __construct() {
    $this->motore = new Motore();
    // etc ..
  }
}

custu no andat bene pro motivos vàrios. Pro incumentzare, immaginamus de tènnere in s'esempru duas versiones de su motore: iscambiare is duas versiones essit complicadu. In prus, cando iscriemus unu test pro sa classe vetura, est còmodu a passare unu motore farsu (mock) cun datos de proa e mesuras de is interatziones cun sa vetura. Custu essit ancora prus de importu cando sa dipendèntzia faghet cosas chi depimus istudare in s'ìnteri de su test, comente tzerriadas a API, iscrituras in sa base de datos, imbiu de messàgios, etc. Sa manera curreta de traballare est:

class Vetura {
  protected MotoreInterface $motore;

  public function __construct(MotoreInterface $motore) {
    $this->motore = $motore;
    // etc ..
  }
}

Pro fàghere is cosas prus fàtziles ddoe at librerias medas chi manìgiant s'inietzione de is dipendèntzias pro nois. Totu is framework modernos ddu faghent, ma podimus fintzas chircare càncua cosa de simpre, comente PHP-DI.

Test, test, test!

Proare s'aplicatzione a manu est de importu, ma non bastat. Su prus trastu famadu pro iscrìere test automàticos est PHPUnit, chi permitit de iscrìere unidades chi averìguant chi una parte de su còdighe (funtzione, ogetu, etc) torret su balore chi abetamus cun una tzerta intrada. Esempru:

$this->assertSame(5, summa(2, 3));

Iscriende afirmaduras che custa est utilosu siat pro cumprèndere si amus fatu càncua faddina in funtziones cumplessas, siat pro s'assegurare chi custas funtziones no acabbent de funtzionare comente si depet a pustis de unu càmbiu.
Ma no est s'ùnicu trastu pro proare su còdighe nostru. Bos cussìgiu pro esempru Codeception chi permitit de proare su traballu nostru de su puntu de vista de s'impitadore. Pro esempru, custu còdighe

$I->amOnPage('/login');
$I->fillField('username', 'Sardumàticu');
$I->fillField('password', 'abcdefghi');
$I->click('INTRA');
$I->see('Benebènnidu, Sardumàticu!');

at a intrare in sa pàgina de atzessu e s'at a assegurare chi ponende is datos giustos s'impitadore at a pòdere imbucare. Est una faina de importu mannu, ca a bortas faghende unu càmbiu arrogamus su cumportamentu de una pàgina chene si nd'acatare. Si iscriemus test chi dd'averìguant ddoe at prus pagu possibilidade de lassare sorpresas malas a is impitadores - e fintzas a is negòtzios nostros, si su situ nostru nos portat dinari.

Cummenta

Categorias