veeb CMS / meeskonna demo

WordPressist Laravelini.

Praktiline käsiraamat meie meeskonnale. Mõttemudelist esimese sisutüübi, turvalise avaldamise ja hoolduseni. Loe peatükkide kaupa ning kontrolli lõpus oma teadmisi.

01 / Mõttemudel: kolm kihti

WordPress annab ühe tootena sisuandmed, halduse, teemad ja laienduste süsteemi. Meie lahenduses on vastutus kolmes kihis. Laravel on rakenduse raamistik: päringud, andmed, turvalisus ja töötlus. Filament on haldusliidese tööriistakast. Blade on avaliku veebi mallikiht. Sisuhaldus tekib meie projekti koodist nende peale.

Filament ei loo paigaldamisel iseenesest lehti, uudiseid, meediateeki ega tõlkeid. Meie arendatud Page, Post, Language ja ContentForm mudelid määravad, mida selles CMS-is hallata saab. Seetõttu saab halduse kujundada projekti tegelike töövoogude järgi, aga ka funktsioonide hooldus jääb meie vastutuseks.

Filamenti interaktiivsus kasutab Livewire’i. Palju haldusliidest kirjeldame PHP-s, kuid brauseris töötab endiselt JavaScript. Selles demos ei ole eraldi Reacti rakendust ega Node’i tootmisserverit. Teistes Laravel-projektides võib frontend olla teistsugune.

Filamenti ülevaade · Laraveli ülevaade

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

02 / WordPressi sõnastik, uus tähendus

Custom post type → mudel, tabel ja resource. Mudel kirjeldab andmeid ja seoseid; migratsioon loob struktuuri; Filament resource annab haldusvaated. See on mõtteline vaste, mitte üks-ühele tehniline asendus.

ACF väljad → Filamenti schema. TextInput, Select, FileUpload ja muud komponendid kirjeldavad vormi. Väli võib olla tabeli veerg, JSON-i osa või seos. Valiku teeb arendaja andmete elutsükli järgi.

ACF Flexible Content → Builder. Meie leheplokid on järjestatud tüübi ja andmetega kirjed. Repeater sobib sama struktuuriga korduvatele üksustele, näiteks kaardid ja FAQ read.

Teema template → Blade’i vaade. Avaliku HTML-i määrame vaadetes; WordPressi template hierarchy ei rakendu automaatselt. WP_Query → Eloquenti päring. Hooks → sündmused, observer’id, middleware ja teenused. Sobiv mehhanism sõltub sellest, millises töötluse etapis loogikat vaja on.

Plugin → sageli Composer-pakett. Pakett võib pakkuda integratsiooni või Filamenti komponenti. Paigaldamise kõrval kontrollime versioonisobivust, hooldatust, litsentsi ja turvalisust.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

03 / Kuidas päring läbi rakenduse liigub

Brauser küsib aadressi. Route seob aadressi käsitlejaga, middleware teeb vajalikud eelkontrollid ning kontroller või route’i funktsioon hangib andmed. Blade koostab HTML-i ja Laravel tagastab vastuse. Vormisaatmine läbib eraldi POST-tee, valideerimise ja salvestamise.

Meie avalikud lehed ja artiklid kasutavad PublicContentCache teenust. Enne puhverdatud andmete lugemist kontrollitakse avaldamist ja keele aktiivsust. Blade saab mudeli, renderdab selle plokid ning loob värske vastuse.

Filamenti muutmisvaates liigub vormi olek Livewire’i päringutega serverisse. Nähtav väli ja serveri usaldatud andmed ei ole sama asi: brauserist saab saata ka käsitsi muudetud väärtusi. Kontrollid peavad toimima serveris, mitte ainult väljade näitamise või peitmise kaudu.

Äriloogika, mida kasutavad nii haldus kui ka muud sisendkanalid, sobib eraldi teenusesse. Meie tõlke kopeerimise reeglid on näiteks TranslateContent teenuses, mitte ainult modaalakna nupu sees.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

04 / Andmemudel, migratsioonid ja seosed

Alusta andmetest. Milline objekt on iseseisev? Milliseid väärtusi otsime, järjestame ja seome? Artikli pealkiri ja avaldamisolek sobivad veergudesse; lehe varieeruv plokistruktuur võib sobida JSON-i. Kui korduv üksus vajab oma elutsüklit või keerulisi päringuid, kaalu eraldi tabelit.

Migratsioon on versioonitud andmebaasimuudatus. Uus veerg, indeks või seos liigub koos koodiga ühest keskkonnast teise. Olemasolevate andmete jaoks mõtle läbi vaikeväärtus ja backfill. Tootmises ei lähtestata andmebaasi arenduse algseisuks ega käivitata hävitavaid seedereid.

Eloquenti mudelis määrame casts’id ning seosed. Näiteks keelel on palju lehti; vormil palju vastuseid. Võõrvõtmed ja unikaalsed indeksid aitavad reegleid jõustada ka siis, kui kaks päringut jõuavad korraga kohale. Tõlkegrupil saab siin olla üks kirje iga keele kohta.

Mass assignment vajab lubatud väljade teadlikku piiramist. Meie mudelite avatud guarded-seadistus eeldab, et teenused ja vormid annavad ette kontrollitud väljad; ära kasuta avaliku päringu kogu sisendit otse mudeli loomisel.

Väldi N+1 päringuid: kui kuvad nimekirjas seotud objekte, laadi vajalikud seosed korraga. Suurt loendit lehitse ja indekseeri päringute järgi. SQLite sobib demole; teise andmebaasi valik vajab reaalsete päringute ja koormuse kontrolli.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

05 / Filamenti resource ja paneel

Resource seob ühe mudeli haldusliidesega. Vorm kirjeldab loomist ja muutmist, tabel nimekirja. Lehed juhivad tegevusi nagu List, Create, Edit ja View. Paneel koondab navigeerimise, sisselogimise, ressursid, vidinad ja visuaalse seadistuse.

Meie PageResource, PostResource ja LanguageResource kasutavad eraldi skeemi- ja tabeliklasse. See hoiab faili loetavana. Resource ei pea muutuma kogu rakenduse äriloogika asukohaks: keeruline töötlus liigub teenusesse ning korduv väljarühm jagatud komponendiks.

Tabelis vali kasutaja otsuseid toetavad veerud, filtrid, otsing ja sortimine. Bulk action puudutab mitut kirjet ning peab arvestama iga kirje õigusi ja võimalikke tõrkeid. Relation manager sobib seotud kirjete haldamiseks olemasoleva objekti kõrval.

Action ühendab nupu, vajadusel modaalvormi ja serveripoolse tegevuse. Meie Translate ja Add new form on selle näited. Kasuta native-tegevusi, et säilitada valideerimine, klaviatuurikäitumine ja veateated; kohandatud JavaScript peaks lahendama konkreetse puudujäägi.

Resource’i ametlik juhend

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

06 / Vormiskeem ja oleku elutsükkel

Skeem määrab väljad, paigutuse, nähtavuse, vaikeväärtused ja valideerimise. Vorm täidetakse kirjest, kasutaja muudab olekut ja salvestamisel koostatakse mudelile minevad andmed. Reaktiivsed sõltuvused vajavad läbimõeldud state path’e, eriti pesastatud Builderi ja Repeateri korral.

Peidetud, disabled ja salvestamisest välja jäetud väli võivad käituda erinevalt. Otsusta, kas tingimuse väljalülitamine säilitab varasema väärtuse või eemaldab selle. Meie kaardi lingi väljalülitamine säilitab väärtused, aga avalik vaade linki ei kuva.

Kui sihtkoha tüüp muutub lehelt artikliks, tuleb vana seotud ID tühjendada. Kui valik sõltub avaldamisest, kontrolli avaldamist ka salvestamisel ja renderdamisel. Ainult rippmenüü valikute piiramine ei ole piisav.

Valideerimisvead peavad jõudma avatud vormi õigesse pesastatud välja. Meie tõlkemodaali puhul on selleks action’i skeemi asukoht. Enne custom-komponenti kontrolli native-komponentide olemasolevaid võimalusi.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

07 / Leheplokid ja korduvkasutatav disain

Meie seitse plokki on hero, tekst, tsitaat, FAQ, kaardid, seotud artiklid ja vorm. Igal tüübil on oma andmeskeem ja avalik Blade-renderdaja. Plokivaliku visuaal ja hõljuv eelvaade renderdatakse automaatselt ploki malli ja praeguste stiilidega; need ei ole salvestamata sisu eelvaade.

Uue ploki lisamisel määra kõigepealt toimetaja sisendid, mõistlikud piirangud ja tühja oleku käitumine. Seejärel lisa Builderi skeem, avalik vaade, stiil, näidis ja oluline käitumistest. Kontrolli vanu kirjeid, kus uusi võtmeid veel ei ole.

Kasuta jagatud ImageFields ja LinkFields gruppe, et sama tegevus ei käituks eri kohtades erinevalt. Faili või lingi turvaline teisendamine avalikuks aadressiks kuulub samuti jagatud loogikasse.

Plokkide ümberjärjestamine ei tohiks kaotada üleslaaditud pilte, tingimuslikke väärtusi ega seoseid. Eraldi testi lisamist plokkide vahele ja lõppu. Avaliku lehe disain ei ole Filamenti halduse teema: neid kujundatakse eraldi.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

08 / Artiklid, HTML ja pildid

Rikastekst ei ole lihtsalt turvaline tekstistring. Meie artiklid renderdatakse Filamenti RichContentRenderer’i kaudu koos lubatud pluginatega. Lehe tekstiploki HTML puhastatakse enne väljundit. Tavalised väärtused kuvatakse Blade’i põgenemisega; toor-HTML-i kasutatakse ainult teadlikult.

Background colour muudab valitud sisu plokiks, säilitades vorminduse ja lõigud. Small text muudab teksti suurust. Toimetaja ja avalik artikkel kasutavad sama sisustiili. Kui lisad uue märgi või sõlme, peavad redaktor ja serveripoolne renderer mõlemad seda mõistma.

Hero-, kaardi- ja kaanepildil on üleslaadimine, eelvaade ja alt-tekst. Uued JPEG, PNG, WebP ja GIF pildid on piiratud 2 MB-ga. Varasemad usaldatud SVG-näidised võivad säilida, kuid uusi SVG-faile ei lubata üles laadida.

Avalik sisupilt ja vormi manus vajavad erinevat ligipääsu. Vormifail ei kuulu avaliku storage-lingi alla. Selle allalaadimine käib kontrollitud admin-tee kaudu. Faili laienduse kõrval kontrollitakse serveris tüüpi, suurust ja lubatud failinime mustrit.

Meediateeki, automaatset pildilõikamist, responsive-variantide genereerimist ja kasutamata failide koristust ei ole selles demos eraldi ehitatud. Kui projekt neid vajab, lisa need teadliku töövoona.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

09 / Keeled, tõlked ja aadressid

Language on meie enda sisumudel. Otsitav kataloog ja lipud aitavad valida päris locale’i. Page ja Post viitavad keelele ning võivad kuuluda ühisesse tõlkegruppi. See on meie CMS-i teostus Laraveli lokaliseerimise võimaluste kõrval.

Translate kopeerib salvestatud sisu uueks mustandiks. Salvestamata väljad kopeerimisele ei lähe. Automaatset masintõlget ei toimu. Seotud versioonid jagavad grupitunnust, mitte elusat sisu: iga keele tekst, plokid ja avaldamine muutuvad eraldi.

Ühes keeles peab slug olema unikaalne; eri keeltes võib see korduda. Kokkupõrkel lisab kopeerimine numbri. Avalik keelevahetaja näitab ainult avaldatud vasteid aktiivsetes keeltes. Halduses saab liikuda ka mustandite vahel.

Vaikekeele URL on prefiksita, teistel keel on aadressis. Canonical ja hreflang kasutavad tegelikke avalikke vasteid. Vaikekeele muutmine mõjutab aadresse, seega vajab tootmises ümbersuunamiste plaani.

Siselingi kopeerimine säilitab sama sihtkirje; see ei otsi ise teise keele vastet. SEO pealkirjade eraldi väljad, sitemap ja üldine redirect-haldur ei ole siin valmis funktsioonid.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

10 / Vormid, valideerimine ja vastused

ContentForm on korduvkasutatav vormikirje. Lehe Form-plokk viitab selle ID-le. Sama vorm võib olla mitmel lehel, aga vormi avaldamine on iseseisev. Add new form loob lehelt mustandi ja säilitab lehe poolelioleva muutmise.

17 väljatüüpi katavad teksti, e-posti, telefoni, URL-i, numbri, kuupäeva, kellaaja, valikud, nõusoleku, faili ning pealkirja ja abiteksti. Igal sisendil on stabiilne unikaalne võti. Küsimuse sildi muutmine ei tohiks muuta andmete tähendust märkamatult.

Server kasutab salvestatud vormiskeemi. Brauser ei määra, millised väljad on lubatud või kohustuslikud. Valiku väärtus peab kuuluma lubatud valikutesse, nõusolek olema antud ja fail vastama piirangutele. PDF, JPEG, PNG ja WebP manus võib olla kuni 2 MB; üks fail ühe failivälja kohta.

Vastused talletatakse kohalikult koos väljade siltide ja tüüpidega. Admini detail kuvab väärtused põgenemisega. E-kirju ega webhook’e demo ei saada. Vastuste säilitustähtaeg ja kustutamise töövoog tuleb enne päris kasutust kokku leppida; automaatset kustutust siin ei ole.

CSRF, päringupiirang, honeypot ja ajastatud ühekordne challenge moodustavad põhikaitse. See ei ole lubadus kogu rämpsposti peatamisest. Avaldatud vorm võib vastu võtta kehtiva päringu ka siis, kui mõni seda sisaldanud leht on peidetud; sulgemiseks peida vorm ise.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

11 / Õigused ja turvalisuse piirid

Sisselogimine vastab küsimusele „kes kasutaja on?”. Autoriseerimine vastab „mida ta selle kirjega teha võib?”. Paneeli ligipääs, resource’i vaatamine, muutmine, kustutamine ja kohandatud action’id vajavad sobivat õiguskontrolli. Nupu peitmine ei asenda serveri kontrolli.

Laravel pakub policy ja gate mehhanisme. Detailne rollide ning õiguste halduse kasutajaliides ei kuulu sellesse demosse. Uue mitme rolliga projekti puhul kirjuta lubatud tegevused enne lahti ning testi keelatud tegevusi otsepäringutega.

CSRF seob veebivormi sessiooniga, valideerimine piirab sisendit ja väljundi põgenemine aitab vältida HTML-i süstimist. Need lahendavad erinevaid probleeme. Failide privaatsus vajab omakorda hoidlaseadistust ja kontrollitud allalaadimist.

Saladused kuuluvad keskkonnaseadistusse, mitte reposse, avalikku HTML-i ega logidesse. Tootmises lülita debug välja, kasuta HTTPS-i ja eraldi kasutajakontosid. Multi-tenancy, auditilogi ja täiendav autentimine vajavad eraldi disaini; ära eelda, et need tekivad admin-paneeli lisamisega.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

12 / Vahemälu ja jõudlus

Selles projektis puhverdatakse avalikke mudeliandmeid failipõhises cache-store’is. Vaikimisi eluiga on kümme minutit. Tervet HTML-vastust, sessiooni, CSRF-välju ega vormi tagasisidet ei puhverdata. Nii saab sama sisu olla kiire ilma kasutajate andmeid segamata.

Mudeli salvestamine ja kustutamine muudab cache’i põlvkonda. Ka seotud artiklid peavad uuenema. Avaldamise kontroll toimub enne puhvrit, et peidetud või kustutatud sisu ei jääks aegumise lõpuni nähtavaks.

Otse SQL-iga tehtud muudatus võib observer’i vahele jätta. Impordi või deploy järel tühjenda avaliku sisu vahemälu selgesõnaliselt. Kontrolli ka keelte ja marsruutide eraldatust; vale cache key võib näidata teise keele sisu.

Enne optimeerimist mõõda päringuid, lehe suurust ja laadimisaega. Cache ei paranda puuduvat indeksit ega liiga suuri pilte. Redis, CDN ja muud tööriistad on valikud konkreetse vajaduse järgi, mitte selle demo automaatsed omadused.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

13 / Taustatööd ja integratsioonid

Laravelis on queue’d pikemate ülesannete jaoks, scheduler ajastatud töödele ning mail ja notifications teadete saatmiseks. Need on head ehituskivid näiteks suure impordi, perioodilise sünkroonimise või avaldamisteavituse jaoks.

Selles demos neid ärivooge ei käivitata. Päris järjekord vajab sobivat ühendust ja töötavat worker’it; ajastus vajab serveris scheduler’i käivitamist. E-kirja jaoks on vaja saatmisteenust ja seadistust. Kasutajaliidese eduteade ei tõesta iseenesest, et taustal tehtav töö valmis.

Integratsioonil määra timeout, veakäitumine, korduskatsete piir ja idempotentsus: sama töö kordumine ei tohi tekitada dubleeritud tellimusi või kirjeid. Logi kasulik diagnostika, kuid eemalda isikuandmed ja saladused. Kriitilise töö ebaõnnestumine vajab nähtavat seiret.

Queue’d · Scheduler

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

14 / Testimine: mida päriselt kontrollida

Ühiktest sobib eraldatud ärireeglile. Feature-test kontrollib HTTP-tee, andmebaasi ja rakenduse koostööd. Filamenti ja Livewire’i testidega saab täita vormi, käivitada action’i ja kontrollida salvestamist. Brauseritest katab fookuse, klaviatuuri, modaalid ja nähtava käitumise.

Meie tähtsad stsenaariumid on ploki säilimine ümberjärjestamisel, üleslaadimise piirangud, tõlkekoopia iseseisvus, mustandi peitmine, cache’i tühjenemine ja vormi andmete sessioonieraldatus. Testi ka manipuleeritud sisendit, puuduvaid õigusi ja kustutatud viiteid.

Kasuta testandmebaasi ja eraldatud failiketast. RefreshDatabase ei tohi kunagi osutada päris sisule. Brauseris muudetud demokirjed ei asenda korduvat automaattesti ning automaattest ei tõesta automaatselt mobiilivaate kvaliteeti.

Uue funktsiooni puhul kontrolli kasutaja tulemust, mitte ainult seda, et sinu kirjutatud meetod kutsuti välja. Kui UI erikäitumine sõltub JavaScriptist, testi seda samas kihis. Jälgi ka ligipääsetavust: sildid, veaseosed, fookuse taastamine ja klaviatuur.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

15 / Arendus, deploy ja hooldus

Composer ja lockfail määravad PHP-sõltuvused. Kasuta selle projekti lukustatud versioone; dokumentatsioon peab vastama põhiversioonile. Demo töötab Laravel 12 ja Filament 5 peal. Versioonitõus tähendab muudatuste juhendi läbimist, testimist ja kohandatud integratsioonide kontrollimist.

Arenduses hoia kood versioonihalduses, keskkonnaseadistus eraldi ning testandmed päris sisust lahus. Väldi vendor-failide muutmist. Kui kohandad native-vaadet, dokumenteeri põhjus, sest see võib uuendusel nõuda käsitsi kohandamist.

Tootmise veebijuur peab olema public-kataloog. Andmebaas ja storage püsivad üle väljalasete. Enne migratsioone tee taastatav varukoopia; rakenda muutused sobivas järjekorras. Kui kasutad worker’eid, tuleb need uue koodi kasutamiseks korrektselt uuesti käivitada.

APP_KEY peab olema stabiilne: selle vahetamine võib muuta krüpteeritud andmed kasutuskõlbmatuks. Debug peab olema välja lülitatud. Kontrolli kirjutusõigusi, logisid, HTTPS-i, cache’i ja serveri tervist. Tagasipööramise plaan peab arvestama ka andmebaasimuutusi, mitte ainult koodi.

Hooldus hõlmab sõltuvuste uuendusi, varukoopiate taastamise katseid, vigade seiret, õiguste ülevaatust ja salvestatud andmete elutsüklit. Raamistik annab mehhanismid; valmis hooldusprotsess on meeskonna töö.

Laraveli deploy-juhend

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →

16 / Praktiline esimene ülesanne

1. Loo „Projektid” sisutüüp. Kirjelda pealkiri, slug, lühikirjeldus, kaanepilt ja avaldamine. Loo migratsioon, mudel ning Filamenti resource. Lisa avalik loend ja detailvaade. Kasuta korduvkasutatavat pildigruppi.

2. Lisa reeglid. Slug peab olema unikaalne, pilt lubatud tüüpi ja mahuga, mustand avalikult peidetud. Otsusta, kes tohib projekti avaldada või kustutada. Lisa päris õiguskontroll.

3. Lisa seos. Projekt võib viidata artiklitele. Kasuta salvestatud ID-sid, lahenda avalik link jooksva kirje järgi ja väldi peidetud sihtide kuvamist. Kontrolli päringute hulka.

4. Tõesta tulemus. Testi loomist, muutmist, keelatud sisendit, avaldamist ja õigusi. Vaata brauseris mobiilipaigutust ja klaviatuuri. Dokumenteeri uued seaded ning deploy sammud.

See harjutus ühendab põhioskused. Täielik pädevus ei tule ühest valikvastustega testist: järgmine samm on väike päris funktsioon, koodiülevaatus ja kaaslasele oma otsuste selgitamine.

Vaata põhjalikumalt: õppetund, harjutus ja test (inglise keeles) →
Praktika / teadmiste kontroll

Kas mõttemudel on paigas?

24 küsimust arenduse, sisumudelite, turvalisuse ja hoolduse kohta. Pärast kontrollimist saad iga vastuse juurde selgituse. Tulemusi ei saadeta serverisse ega salvestata.

Vastatud 0 / 24

1. Milline jaotus kirjeldab seda projekti?
2. Mida vajad uue iseseisva sisutüübi loomiseks?
3. Millal eelistada eraldi tabelit ploki JSON-ile?
4. Kuidas lisada tootmises kohustuslik väli olemasolevatele kirjetele?
5. Mille poolest erinevad Builder ja Repeater?
6. Kuhu panna loogika, mida vajavad nii action kui ka import?
7. Lingiväljad peideti. Mida tuleb veel otsustada?
8. Kas action-nupu peitmine välistab keelatud tegevuse?
9. Mis vahe on autentimisel ja autoriseerimisel?
10. Kust tulevad avaliku vormi usaldatud valideerimisreeglid?
11. Kuhu salvestada vormi privaatne manus?
12. Kuidas avaldada rikasteksti?
13. Mida meie Translate kopeerib?
14. Kas seotud versiooni teksti muutmine muudab teist keelt?
15. Mis peaks juhtuma siselingiga artikli slugi muutumisel?
16. Mida see demo puhverdatult jagab?
17. Pärast otse SQL-importi on vana sisu alles. Mis aitab?
18. Mis aitab seotud andmete N+1 päringute vastu?
19. Kas queue-jobi kirjutamisest piisab taustatöö käitamiseks?
20. Mida tähendab idempotentne töötlus?
21. Milline kontroll vajab eriti brauseri taset?
22. Mis peab säilima üle uue väljalaske?
23. Kuidas valida Filamenti lisapaketti?
24. Milline võimalus vajab selles demos veel eraldi teostust?