Comportamente - concepte de bază - un ghid cuprinzător pentru yii 2

Comportamentele (comportamentele) sunt exemple de clasă yii \ base \ Behavior sau o clasă moștenită de la ea. Comportamente cunoscute și sub numele de impurități. Puteți extinde funcționalitatea componentelor existente fără a fi nevoie să modificați arborele de moștenire. După atașarea comportamentului la componentă, metodele și proprietățile sale sunt "încorporate" în componentă și devin disponibile în același mod ca și când ar fi fost declarate în clasa componentă în sine. În plus, comportamentul poate răspunde la evenimente. Componentele create de componentă vă permit să finalizați sau să modificați execuția normală a codului componentei.







Crearea de comportamente

Comportamentele sunt create prin extinderea clasei de bază yii \ base \ Behavior sau a moștenitorilor săi. De exemplu,

În exemplul de mai sus, este declarată clasa de comportament a aplicației \ components \ MyBehavior care conține proprietățile prop1 și prop2. și o metodă foo (). Rețineți că prop2 proprietatea este declarată folosind getProp2 () getter și setProp2 () setter. Acest lucru este posibil, deoarece yii \ base \ Behavior este o clasă copil pentru yii \ base \ BaseObject. care oferă capacitatea de a determina proprietățile prin intermediul getters și setters.

Deoarece această clasă este un comportament, atunci când este atașat la o componentă, proprietățile prop1 și prop2 sunt, de asemenea, disponibile. și metoda foo ().

Sfat: În interiorul comportamentului, este posibil să se facă referire la componenta la care este atașat utilizând proprietatea yii \ base \ Behavior :: $ owner.

Gestionarea evenimentului cu componente

Dacă comportamentul este necesar pentru a răspunde la evenimentele componentei la care este atașată, atunci trebuie să înlocuiți metoda yii \ base \ Behavior :: events (). De exemplu,

Metoda evenimente () trebuie să returneze o listă de evenimente și manipulatorii corespunzători acestora. În exemplul de mai sus, sunt declarate evenimentul EVENT_BEFORE_VALIDATE și procedura de manipulare a lui previousValidate (). Puteți specifica modulul de tratare a evenimentelor într-unul din următoarele moduri:

  • Un șir cu numele metodei comportamentului curent, ca în exemplul de mai sus;
  • o matrice care conține numele obiectului sau al clasei și numele metodei, de exemplu, [$ object, 'methodName'];
  • funcția anonimă.

Funcția manipulatorului evenimentului ar trebui să arate ca mai jos, unde evenimentul $ conține parametrul evenimentului. Pentru mai multe informații, consultați Evenimente.

Atașarea comportamentelor

Atașați comportamentul la componentă fie static, fie dinamic. În practică, atașamentul static este mai des folosit.

Pentru a atașa comportamentul în mod static, trebuie să înlocuiți metoda comportamentelor () a componentei cu care urmează să fie atașată. Metoda comportamente () ar trebui să returneze o listă de configurații de comportament. Configurația comportamentului este numele clasei de comportament sau a unui set de setări ale acesteia:

Puteți asocia numele cu comportamentul, specificându-l drept cheia elementului de matrice care corespunde configurației comportamentului. În acest caz, comportamentul este numit numit. În exemplul de mai sus, există două comportamente numite: myBehavior2 și myBehavior4. Dacă nu există niciun nume asociat comportamentului, acest comportament se numește anonim.

Pentru a atașa dinamic comportamentul, trebuie să apelați metoda yii \ base \ Component :: attachBehavior () a componentei necesare:







Folosind metoda yii \ base \ Component :: attachBehaviors () vă permite să atașați mai multe comportamente simultan. De exemplu,

De asemenea, puteți atașa comportamentul componentei prin configurație. după cum urmează:

Pentru mai multe informații, consultați Configurații.

Utilizarea comportamentelor

Pentru a utiliza comportamentul, acesta trebuie să fie atașat componentei așa cum este descris mai sus. După ce comportamentul este atașat componentei, utilizarea lui nu cauzează complicații.

Puteți să vă referiți la variabile sau proprietăți publice. a declarat prin utilizarea getters și setters în comportament, prin componenta la care este atașat:

În mod similar, puteți apela metode publice de comportament,

Notă, deși componenta $ nu are proprietatea prop1 și metoda foo (). ele pot fi folosite, ca și cum ar fi membri ai acestei clase.

În cazul în care două comportamente care au proprietăți sau metode cu aceleași nume sunt atașate la o componentă, comportamentul atașat mai devreme va avea un avantaj.

Dacă specificați un nume când atașați un comportament unei componente, puteți să consultați comportamentul acelui nume, după cum se arată mai jos:

De asemenea, puteți obține toate comportamentele atașate componentei:

Comportamente necorespunzătoare

Pentru a dezabona un comportament dintr-o componentă, trebuie să apelați metoda yii \ base \ Component :: detachBehavior (). specificând numele asociat cu comportamentul:

Este, de asemenea, posibilă dezmembrarea tuturor comportamentelor:

Utilizarea Comportamentului Timpului

În cele din urmă, să aruncăm o privire asupra comportamentelor yii \ TimestampBehavior - un comportament care vă permite să actualizați automat atributele cu timestamps în timp ce salvați modelele Active Record prin insert (). update () sau salvați ().

În primul rând, trebuie să atașați un comportament la clasa Active Record. în care este necesar:

Configurația de mai sus descrie următoarele:

  • la inserarea unei noi înregistrări, comportamentul trebuie să atribuie timestampului curent UNIX atributelor create_at și updated_at;
  • Când actualizați o înregistrare existentă, comportamentul ar trebui să aloce timestampului curent UNIX la atributul updated_at.

Notă: Pentru ca configurația de mai sus să funcționeze cu MySQL, tipul create_at și updated_at trebuie să fie int (11). Va stoca marcajul de timp UNIX.

Acum, dacă salvați obiectul Utilizator. atunci valorile timestampului UNIX sunt setate automat la atributele create_at și updated_at la momentul salvării înregistrării:

Comportamentul lui TimestampBehavior conține, de asemenea, o metodă touch () utilă. care stabilește timbrul curent la atributul specificat și îl salvează în baza de date:

Alte comportamente

Pe lângă cele menționate mai sus, există și alte comportamente deja implementate. Atât built-in cât și terțe părți:

  • yii \ behaviors \ BlameableBehavior - adaugă automat atributele specificate ale ID-ului curent al utilizatorului.
  • yii \ behaviors \ SluggableBehavior - înmulțește automat atributul specificat cu un text prietenos cu adresa URL care este obținut dintr-un alt atribut.
  • yii \ behaviors \ AttributeBehavior - seta automat valoarea specificata la unul sau mai multe atribute ActiveRecord cand apar anumite evenimente.
  • yii2tech \ ar \ softdelete \ SoftDeleteBehavior - oferă metode pentru ștergerea și restaurarea "soft" a ActiveRecord. Aceasta înseamnă că expune un statut sau un steag care indică faptul că înregistrarea a fost ștearsă.
  • yii2tech \ ar \ position \ PositionBehavior - vă permite să gestionați ordinea înregistrărilor folosind metode speciale. Informațiile sunt stocate într-un câmp întreg.

Comparație cu tranzacțiile

În ciuda faptului că comportamentele sunt similare tranzacțiilor prin faptul că își "injectează" proprietățile și metodele în clasa principală, ele au multe diferențe. Ambii au argumente pro și contra și mai degrabă se completează mai degrabă decât înlocuiesc.

Comportamente comportamentale

Comportamentele, ca orice alte clase, susțin moștenirea. Trăsăturile pot fi considerate ca o copie-pastă la nivelul limbii. Ei nu suportă moștenirea.

Comportamentele pot fi atașate și dezabonate din componentă dinamic, fără a fi necesară modificarea clasei de componente. Pentru a utiliza trăsături, trebuie să modificați clasa.

Comportamentele, spre deosebire de trăsături, pot fi personalizate.

Comportamentele pot fi configurate astfel încât să răspundă evenimentelor componente.

Conflictele de nume de proprietate și metodele de comportament atașate la o componentă sunt rezolvate în funcție de ordinea conectării acestora. Conflictele de nume cauzate de diverse trăsături necesită redenumirea manuală a proprietăților sau metodelor conflictuale.

Avantaje ale trasaturilor

Trăsăturile sunt mult mai productive decât comportamentele care, ca obiecte, necesită timp și memorie suplimentară.

Multe IDE-uri sprijină lucrul cu trăsăturile, deoarece sunt construite în limbaj standard.







Articole similare

Trimiteți-le prietenilor: