2. Views ir katalogų struktūra

2.1. Pirma praktika su Views - pakeiskime pirmą puslapį

Pradėkime ne nuo teorijos, o nuo praktikos. Juk smagiau kažką pamaigyti realiai, negu vien tik sausai kalti taisykles. Taigi, grįžkime prie mūsų pirmojo puslapio Laravel 5 - priminsiu, naršyklėje jis turi atrodyti taip:

Pabandykime pakeisti šį užrašą į lietuvišką "Laba diena". Viskas labai paprasta - paredaguokime resources/views/welcome.blade.php:

Kaip matote, čia yra tiesiog HTML/CSS kodas, nors failas ir turi plėtinį .php. 82-oje eilutėje keičiame tekstą "Laravel" į "Laba diena":

Taigi, kaip turbūt jau supratote - katalogas resources/views atsako už puslapio atvaizdavimą - už HTML ir CSS kodą. Bet, be abejo, čia galima rašyti ir PHP kodą. Pabandykime:

<?php for ($i=1; $i<=3; $i++): ?>
<div class="title m-b-md">Laba diena</div>
<?php endfor; ?>

Iš esmės, Views failuose galima rašyti bet kokį PHP kodą, juk tai yra .php failai. Bet pagal MVC principus patartina čia apsiriboti tik pagrindinėmis struktūromis - IF sakiniais, ciklais ir duomenų išvedimu. Visa kita PHP logika turėtų būti perkelta į Models ir Controllers dalį.

Taip pat svarbu žinoti, kad Laravel Views failai turi savo atskirą vidinę šablonų kalbą pavadinimu Blade (ne veltui failo gale yra .blade.php) - ji leidžia praktiškai visai atsisakyti PHP kodo ir sutaupyti laiko, naudojantis Laravel funkcijomis. Apie Blade kalbėsime atskirai, tam bus skirtas visas skyrelis.

 

2.2. Katalogų struktūra: Models / Views / Controllers

Pereikime nuo MVC. Tiems kas nežino, kas tai yra ar nori prisiminti - trumpai:

Naudinga info: Kas yra MVC?

     MVC (Model / View / Controller) yra programavimo architektūra, kurią naudoja toli gražu ne tik PHP, tai labiau bendra kodo struktūros filosofija, kuri gali būti naudinga ir kitose kalbose. 

MVC padeda atsakyti į klausimą "Kaip logiškai sudėlioti savo kodą į skirtingas klases, failus ir katalogus". Tikslas - atskirti logiškai skirtingas dalis, šiuo atveju jų yra trys:
  • Views: failai, skirti atvaizdavimui, čia rašomas HTML kodas, bet prie jo galima ir nedidelė PHP logika: IF sakiniai arba ciklai
  • Controllers: failai, kurie apdoroja URL užklausą ir parodo tam tikrą reikalingą View failą
  • Models: čia sudėta visa logika - darbas su duomenų baze (duomenų ištraukimas ir saugojimas), skaičiavimai, funkcijos. Controllers failai kviečia reikalingas Models funkcijas ir perduoda jų rezultatus į Views failus kaip parametrus.

Tokiu būdu tampa beveik vienareikšmiškai aišku, kokiame kataloge rašyti tam tikrą kodą, o kitam programuotojui - kur būtent jo ieškoti. Tuo pačiu front-end darbas atskiriamas į Views, kur dizaineris ar "karpytojas" gali dirbti tik su tuo katalogu ir nesigilinti į logiką. 

Taigi, pagal MVC principus atskiros jo dalys saugomos tokiuose kataloguose:

  • Models - tiesiog kataloge /app (pvz /app/User.php)
  • Views - kaip matėme, kataloge /resources/views
  • Controllers - kataloge /app/Http/Controllers

Atrodo painu? Neišsigąskite. Apie kiekvieną iš šių sričių detaliai kalbėsime vėliau.

2.3. Katalogų struktūra: kiti katalogai ir failai

2.3.1. /storage

Čia yra katalogas, kuris serveryje turi turėti "writable" savybę: būtent į jį bus įrašomi visokie laikini failai, klaidų logai ir kt. Redaguoti katalogo turinio nereikia.

2.3.2. /config

Katalogo pavadinimas kalba pats už save, pabrėžti reikia tik tai, kaip patogiai suskirstyta informacija: ne sugrūsta į vieną kokį config.php, o išskaidyta pagal prasmę, sakykime failas config/database.php atsako už prisijungimo parametrus prie duomenų bazės.

2.3.3. /database

Pratęsiant kalbą apie duomenų bazę, į šį katalogą bus automatiškai įrašomi failai duomenų bazės generavimui. Apie Laravel turimą ORM mechanizmą Eloguent ir apie duomenų bazės migravimus kalbėsime vėliau, kol kas žinokite kad šio katalogo turinio keisti nereikia, viskas vyks automatiškai.

2.3.4. /routes

Labai svarbus katalogas, ypač routes/web.php failas - būtent jame bus nurodoma, koks naršyklėje įvedamas URL adresas kaip apdorojamas. Tas procesas vadinamas routing ir būtent jam skirta kita pamoka, o kol kas tik žinokite, kad šį failą projekto pradžioje redaguosite dažnai.

2.3.5. /public

Katalogas, matomas visiems išorėje, ir be to - būtent čia talpinsite visus savo "assets": CSS stilius, JavaScript skriptus ir paveiksliukus.

2.3.6. /vendor

Čia bus talpinamos visos pagalbinės klasės, kurias naudoja Laravel ir kurios bus diegiamos su Composer.

Taip pat pagrindiniame kataloge yra keletas failų, kuriuos reikėtų paminėti:

  • .gitignore - jei dirbate su GIT versijų kontrolės sistema, tai šis failas Laravel sistemos automatiškai užpildomas, kad neįtrauktų į repozitoriją didžiulio /vendor katalogo bei kai kurių sisteminių failų;
  • composer.json - vėlgi automatiškai užpildytas Composer failas su informacija apie komponentus, kuriuos naudoja Laravel;
  • artisan - čia yra Laravel komandinės eilutės pagalbininkas, apie kurį kalbėsime kurso viduryje - jo veiksmai vykdomi komandinėje eilutėje parašius "php artisan [komanda]"

Kiti failai turi mažesnę reikšmę, tad jei norėsite apie juos pasiskaityti - pagūglinkite. Noriu šiame kurse kol kas apsistoti ties tuo, kas svarbiausia, ir neperkrauti jūsų informacija.

 

2.4. Praktika: dėliojame mūsų būsimo projekto griaučius

Kaip jau ne kartą minėjau, šio kurso metu kursime realų projektą - krepšinio aikštelių duomenų bazę. Pats laikas aptarti, iš ko tas projektas susidarys ir kaip visa tai atrodys Laravel katalogų struktūroje.

Funkcijų bus nedaug:

  • Iš administravimo pusės: 
    • Galimybė prisijungti su administratoriaus teisėmis
    • Galimybė valdyti aikšteles - peržiūrėti, įvesti, redaguoti ir trinti
    • Galimybė valdyti miestus
    • Galimybė valdyti aikštelių tipus
  • Iš išorės:
    • Aikštelių žemėlapis pagal miestą
    • Aikštelių paieška pagal adresą
    • Konkrečios aikštelės duomenų peržiūra
    • Statiniai puslapiai: "Apie projektą" ir "Kontaktai"

Tačiau šių funkcijų pilnai užteks, kad galėtume paliesti svarbiausius Laravel aspektus ir juos pritaikyti praktikoje.

Taigi, padarykime sąrašą visų skirtingų puslapių, kuriuos turės mūsų projektas:

http://localhost/laravelcourse/public pagrindinis puslapis - aikštelių žemėlapis ir paieškos forma
http://localhost/laravelcourse/public/aiksteles/[paieškos_filtrai] paieškos rezultatai
http://localhost/laravelcourse/public/aikstele/[pavadinimas] konkreti aikštelė
http://localhost/laravelcourse/public/apie informacija apie projektą
http://localhost/laravelcourse/public/kontaktai kontaktų forma
http://localhost/laravelcourse/public/admin prisijungimas administratoriui
http://localhost/laravelcourse/public/admin/aiksteles aikštelių valdymas
http://localhost/laravelcourse/public/admin/miestai miestų valdymas
http://localhost/laravelcourse/public/admin/aiksteliu_tipai aikštelių tipų valdymas

Jau kitoje pamokoje paruošime mūsų projekto atvaizdavimui skirtus Views failus.

 

Namų darbai

Šioje pamokoje namų darbų bus nedaug, nes didžioji dalis informacijos yra labiau pasižiūrėjimui ir susipažinimui, negu praktikai. O bet tačiau - vis tiek padarykite štai ką:

  • Pažaiskite su resources/views/welcome.blade.php turiniu - pabandykite įdėti daugiau PHP kodo ir pažiūrėkite, kaip puslapis atrodo
  • Pavaikščiokite po Laravel katalogus - pabandykite patys išsiaiškinti paskirtį kai kurių katalogų ir failų, kurie yra neaiškūs

 

Pamokos testas

Dėmesio - SVARBU: testą galima spręsti tik VIENĄ KARTĄ, vėliau pažymio ištaisyti nebus įmanoma.

1. Abreviatūroje MVC - ką reiškia C?
Class
Controller
Closure
Control

2. Kuri MVC dalis atsako už vizualų informacijos pateikimą naršyklėje?
Views
Controllers
Nei viena iš jų
Models

3. Ar galima Laravel sistemoje Views failo viduje rašyti PHP kodą?
Taip, bet tik tam tikras funkcijas ir struktūras
Ne, negalima
Taip, bet tokius Views failus reikia perkelti į atskirą katalogą
Taip, galima

4. Ar galima Laravel sistemoje Views failo viduje rašyti CSS kodą?
Ne, negalima
Taip, bet tokius Views failus reikia perkelti į atskirą katalogą
Taip, bet tik tam tikras struktūras
Taip, galima

5. Kuriame Laravel kataloge yra talpinami Modeliai?
/vendor
/mvc
/app
/public

6. Įdiegus Laravel, kaip vadinasi View failas, parodantis mums "Laravel 5"?
welcome.laravel
welcome.view
welcome.php
welcome.blade.php

7. Kokią paskirtį turi failas .gitignore?
Nurodyti, kokie failai neturi plėtinio .git
Nurodyti, kad bus ignoruojama GIT sistema - bus naudojamasi kitu įrankiu
Nurodyti, kokie web-projekto puslapiai nebus traukiami į Google paieškos indeksą
Nurodyti GIT sistemai, kurių failų ir katalogų netraukti į repozitoriją

8. Kas yra saugoma kataloge /vendor?
Composer sistemos failai
Pagalbinės klasės ir bibliotekos
Laravel sistemos branduolys
Views failai

9. Kaip vadinasi Laravel vidinė kalba, skirta Views failuose naudoti tam tikras šablonų funkcijas?
Composer
Artisan
Bootstrap
Blade

10. Kokiame faile yra nurodoma pagrindinė informacija apie naršyklėje įvestų URL adresų nukreipimą į reikalingą Laravel funkciją?
artisan
app/controllers/controller.php
routes/web.php
composer.json

Dvi pamokos pateikiamos nemokamai.
Jei patiko - pirmyn toliau!

Pirkti visą kursą (23 EUR)