V aplikaciji Laravel uporabite vzorec Oblikovanja skladišča

Prej sem pisal o tem, kako sestaviti aplikacijo z nalogami z Laravelom in Vue.js. Laravel je PHP okvir za gradnjo razširljivih spletnih aplikacij in API-jev. Vue.js je okvir Javascript in alternativa jQuery ali React.

Začnite

V tej vadnici bomo dodali funkcionalnost aplikaciji, ki smo jo zgradili v prejšnjem vodniku. Klonirajte github repo, zaženite namestitev skladatelja, namestite npm in se povežite z bazo podatkov.

$ mysql -uroot -p
mysql> ustvari bazo podatkov laravelTaskApp;

Če ste na tej točki obtičali, si oglejte druge članke, o katerih sem pisal o namestitvi MySQL in začetni nastavitvi programa Laravel. Na localhost: 8000 si lahko ogledate aplikacijo, ki asinhrono dodaja in briše naloge. To pomeni, da izvaja postopke in prikazuje posodobljene podatke, ne da bi osvežil spletno stran.

Aplikacija opravil, ki smo jo zgradili v prejšnji vadnici.

Vzorec oblikovanja skladišča

V prejšnjem tutorialu smo v krmilnik zapisali vso našo logiko aplikacije. Obstaja alternativni pristop k razvoju, ki povzame nekaj klicev v razrede PHP, imenovane Repositories. Ideja je, da lahko modele ločimo od krmilnikov in zapletenim poizvedbam dodelimo berljiva imena.

Svojo aplikacijo bomo spremenili znova, da bomo uporabili vzorec repozitorija. Prvi korak je ustvariti datoteko za app / Repositories / Repository.php.

 model = $ model;
    }

    // Pridobite vse primere modela
    javna funkcija vse ()
    {
        vrni $ this-> model-> all ();
    }

    // ustvarite nov zapis v bazi podatkov
    ustvarjanje javne funkcije (niz podatkov $)
    {
        vrnite $ this-> model-> create ($ data);
    }

    // posodobite zapis v bazi podatkov
    posodobitev javne funkcije (matrika $ data, $ id)
    {
        $ record = $ this-> find ($ id);
        vrne $ zapis-> posodobitev ($ podatki);
    }

    // odstranite zapis iz baze podatkov
    javna funkcija brisanje ($ id)
    {
        vrnite $ this-> model-> uničite ($ id);
    }

    // prikaži zapis z danim idom
    show javnih funkcij ($ id)
    {
        vrni $ this-> model-findOrFail ($ id);
    }

    // Pridobite pridruženi model
    javna funkcija getModel ()
    {
        vrnite $ this-> model;
    }

    // Nastavite pridruženi model
    set javnih funkcijModel (model $)
    {
        $ this-> model = $ model;
        vrni $ to;
    }

    // Eager razmerja med bazo podatkov
    javna funkcija z ($ odnosi)
    {
        vrni $ this-> model-> with ($ odnosi);
    }
}

Ta datoteka določa naš razred repozitorija. Primeri tega razreda imajo lastnost modela, ki ga vežemo na Zgovorni model. Ko je to omejeno v konstruktorju, lahko pokličemo zgovorne metode, kot je findOrFail, posodobitev ali vse iz metod razreda.

Izvedbeni odsek RepositoryInterface ni nujno potreben, vendar doda dodaten sloj strukture v našo kodo. Vmesnik je pogodba, ki določa metode, ki jih je MORAJO definirati. V našem primeru je vmesnik videti takole:

Če izdelamo nova repozitorija, ki izvajajo ta vmesnik, bomo vedno vedeli, da so te metode definirane. Vmesniki zagotavljajo strukturo, tako da vemo, kaj naša koda mora storiti.

Nazaj v datoteko TaskController.php instanciramo skladišče in vanj posredujemo model Task.

 model = novo skladišče ($ naloga);
   }

   indeks javne funkcije ()
   {
       vrni $ this-> model-> all ();
   }

   trgovina z javnimi funkcijami (Zahtevaj zahtevo $
   {
       $ this-> preverite (zahteva $, [
           'body' => 'zahtevano | max: 500'
       ]);

       // ustvarite zapis in pošljite samo polja, ki jih je mogoče izpolniti
       vrnite $ this-> model-> create ($ request-> only ($ this-> model-> getModel () -> fillable));
   }

   show javnih funkcij ($ id)
   {
       vrni $ this-> model-> show ($ id);
   }

   posodobitev javne funkcije (Zahtevaj $ zahtevo, $ id)
   {
       // posodobite model in se podajte le v polja, ki jih lahko izpolnite
       $ this-> model-> posodobitev ($ request-> only ($ this-> model-> getModel () -> fillable), $ id);

       vrni $ this-> model-> find ($ id);
   }

   javna funkcija uničiti ($ id)
   {
       vrnite $ this-> model-> delete ($ id);
   }
}

Posoda storitve Laravel bo samodejno razrešila naše odvisnosti in jih vbrizgala v primerek regulatorja (dokumente).

Na tej točki naša aplikacija deluje popolnoma enako, vendar je bila naša koda spremenjena na novo, da bi uporabljala skladišča in dodali smo še nekaj končnih točk API-ja.

Izvorna koda je na voljo na Githubu

Če ste kandidat na trgu dela ali se zagotovo zaposlite na območju Bay, lahko ustvarite profil na Employbl