# 02_REQUEST_LIFECYCLE.md

# Egy kérés teljes életútja

Ez a dokumentum azt mutatja be, hogyan jut el egy HTTP kérés
a böngészőtől egészen a kész HTML oldalig.

Példaként ezt az URL-t követjük végig:

https://domain.hu/munkaink

A folyamat ugyanígy működik minden oldal esetén.

---

# 1. Browser

A felhasználó beírja:

https://domain.hu/munkaink

A böngésző HTTP GET kérést küld a webszervernek.

A böngésző ekkor még semmit nem tud az oldalról.

Nem tudja:

- létezik-e
- milyen adatbázis tartozik hozzá
- milyen témát használ
- milyen modulokat kell betölteni

Csak egy URL-t küld.

↓

Apache

---

# 2. Apache

Apache megkeresi az index.php fájlt.

Minden kérés ezen keresztül indul.

index.php

↓

CodeIgniter

---

# 3. Bootstrap

A CodeIgniter inicializálja:

- Config
- Session
- Database
- Services
- Routes

Ekkor még nem futott le egyetlen Controller sem.

↓

Routes

---

# 4. Routes

A Route rendszer megkeresi:

melyik Controller tartozik ehhez az URL-hez.

Példa:

```

$munkaink

↓

Page::show('munkaink')

```

A Route feladata kizárólag a megfelelő Controller kiválasztása.

Nem ír HTML-t.

Nem kérdez adatbázist.

Nem választ layoutot.

↓

Controller

---

# 5. Controller

Page Controller

```

public function show($slug)

```

A slug értéke:

```

munkaink

```

A Controller feladata:

- slug átvétele
- PageResolver meghívása
- ThemeService meghívása

A Controller NEM:

- készít HTML-t
- kérdez adatbázist
- épít menüt
- tölti be a CSS-eket

A Controller csak koordinál.

↓

PageResolver

---

# 6. PageResolver

A PageResolver dönti el:

Mi ez az URL?

Lehetséges:

CMS oldal

↓

Statikus oldal

↓

404

Példánkban:

```

munkaink

```

megtalálható az adatbázisban.

Ezért:

```

type = cms_page

```

Ezután lefut:

parseDynamicBlocks()

Ez lecseréli például:

```

{{gallery:munkaink}}

```

HTML-re.

↓

GalleryService

---

# 7. GalleryService

A GalleryService feladata:

- galéria lekérése
- képek lekérése
- layout kiválasztása
- assetek regisztrálása

Példa:

```

AssetService::addCss('gallery.css');

AssetService::addJs('gallery.js');

```

Majd:

```

layout2.php

```

renderelése.

A GalleryService végül visszaad egy HTML stringet.

↓

PageResolver

---

# 8. PageResolver

A shortcode helyére bekerül a kész HTML.

A CMS oldal szövege így már teljes.

↓

ThemeService

---

# 9. ThemeService

Ez a teljes oldal összeállításáért felel.

Betölti:

- Theme
- Menü
- Logó
- Site beállítások
- Footer
- Header

Majd meghívja:

```

site.php

```

↓

Layout

---

# 10. site.php

A site.php a teljes HTML váz.

Feladata:

HEAD

↓

CSS

↓

HEADER

↓

CONTENT

↓

FOOTER

↓

JS

↓

Popup

↓

Hook

↓

AssetService

A site.php nem végez adatbázis műveletet.

Nem végez üzleti logikát.

Csak összeállítja az oldalt.

---

# 11. AssetService

Korábban minden modul regisztrálta:

```

gallery.css

video.css

documents.css

popup.css

```

Most történik meg ezek kiírása.

```

<link>

<script>

```

↓

HTML

---

# 12. Browser

A teljes HTML elkészül.

Ez kerül vissza a böngészőnek.

A böngésző:

- letölti a CSS fájlokat
- letölti a JS fájlokat
- kirajzolja az oldalt

A PHP futása itt véget ér.

A további működést már JavaScript végzi.

---

# A teljes folyamat

```

Browser

↓

Apache

↓

index.php

↓

CodeIgniter Bootstrap

↓

Routes

↓

Controller

↓

PageResolver

↓

Dynamic Blocks

↓

GalleryService

↓

AssetService

↓

ThemeService

↓

site.php

↓

HTML

↓

Browser

```

---

# Fontos tervezési elvek

A Route csak irányít.

↓

A Controller csak koordinál.

↓

A Service dolgozik.

↓

A Layout megjelenít.

↓

Az AssetService gyűjt.

↓

A ThemeService összerak.

↓

A site.php kirajzol.

Ha ezt a szabályt minden modul követi,
akkor a rendszer hosszú távon is könnyen karbantartható marad.
