17 KiB
Hibrid architektúra: Legacy vs. Modern
A projekt jelenleg átmeneti fázisban van a régi Laravel 8-as architektúráról a modern Laravel 12-es felépítésre. KRITIKUS fontosságú a két "világ" megkülönböztetése:
1. Legacy Világ (Csak karbantartás)
- Technológiai stekk: jQuery, Bootstrap, Laravel Mix (
webpack.mix.js), DataTables, Mustache.js. - Belépési pont:
resources/views/layout/core.blade.php,/legacyútvonalak, és a hagyományos Blade nézeteket használó kontrollerek. - Assetek: A
mix()függvénnyel kezelve. A fájlok aresources/js/mappában találhatók (kivéve amodernalmappát). - Szabály: Ezekhez CSAK hibajavítás vagy kisebb módosítás esetén nyúlj. NE implementálj ide új funkciókat, hacsak nincs rá kifejezett kérés.
2. Modern Világ (Elsődleges fejlesztés)
- Technológiai stekk: Laravel 12, Filament v4 (TALL stekk: Tailwind, Alpine.js, Laravel, Livewire), Vite (
vite.config.js). - Belépési pont:
/admin(Filament Dashboard),resources/modern/mappa. - Assetek: A
vite()függvénnyel kezelve. A stílusokhoz Tailwind CSS v4-et használunk. - Szabály: MINDEN új funkciót Filament resource-ok/oldalak vagy modern Livewire komponensek használatával kell megvalósítani.
3. Átállás és Modernizáció
- "Clean Cut" megközelítés: Szisztematikusan váltjuk ki a régi jQuery megoldásokat modern Laravel 12-es megfelelőkre.
- Auditálás: Használd a
BaseAuditableosztályt minden új modellnél a konzisztens követhetőség érdekében. - Refaktorálás: Ha egy legacy kontroller/nézet jelentős átalakítást igényel, javasold annak áthelyezését egy Filament Resource-ba.
Projekt-specifikus szabályok
- API válaszok: Használd a
flugger/laravel-respondercsomagot (responder()helper) minden API válaszhoz. Kövesd azOrderController.php-ban látható mintát. - API verziózás: Az API verziókat a névterekből kell kinyerni a
parseAPIVersionFromNamespace(__NAMESPACE__)helper segítségével. - Dokumentáció: Használd a Scribe-ot az API dokumentációhoz. Használj
@group,@authenticated,@bodyParam, és@responseFieldannotációkat a kontrollerekben. - Modellek: Az új modelleknek jellemzően a
BaseAuditableosztályból kell származniuk a sima EloquentModelhelyett, ha auditálás szükséges. - Helperek: Használd az
app/helpers.phpfájlban definiált projekt-specifikus helpereket (pl.formatterPhoneNumber,formatterDateTime,getSql). - Fordítások: Használd a
laravel-lang/langcsomagot a többnyelvű támogatáshoz. - Enumok: Használd a
bensampo/laravel-enumcsomagot a típusbiztos felsorolásokhoz (pl.OrderStatusEnum,OrderType).
=== alapvető szabályok ===
Laravel Boost Irányelvek
A Laravel Boost irányelveket kifejezetten a Laravel karbantartói állították össze ehhez az alkalmazáshoz. Ezeket az irányelveket szigorúan be kell tartani a legjobb Laravel fejlesztési élmény biztosítása érdekében.
Alapvető kontextus
Ez egy Laravel alkalmazás, a fő ökoszisztéma csomagok és verziók alább láthatók. Te ezeknek a szakértője vagy. Gondoskodj róla, hogy tartsd magad ezekhez a specifikus csomagokhoz és verziókhoz.
- php - 8.4
- filament/filament (FILAMENT) - v4
- laravel/framework (LARAVEL) - v12
- laravel/prompts (PROMPTS) - v0
- laravel/sanctum (SANCTUM) - v4
- livewire/livewire (LIVEWIRE) - v3
- laravel/boost (BOOST) - v2
- laravel/mcp (MCP) - v0
- laravel/pail (PAIL) - v1
- laravel/sail (SAIL) - v1
- pestphp/pest (PEST) - v3
- phpunit/phpunit (PHPUNIT) - v11
- tailwindcss (TAILWINDCSS) - v4
Képességek aktiválása
Ez a projekt tartomány-specifikus képességekkel rendelkezik. Kötelező aktiválnod a releváns képességet, amikor abban a tartományban dolgozol — ne várd meg, amíg elakadsz.
laravel-best-practices— Használd ezt a képességet Laravel PHP kód írásakor, átnézésekor vagy refaktorálásakor. Ez magában foglalja kontrollerek, modellek, migrációk, form requestek, policy-k, jobok, ütemezett parancsok, service osztályok és Eloquent lekérdezések készítését vagy módosítását. Aktiváld N+1 és lekérdezési teljesítményproblémák, gyorsítótárazási stratégiák, autorizációs és biztonsági minták, validáció, hibakezelés, sor- és job konfiguráció, útvonal definíciók és architektúrális döntések esetén. Használd továbbá Laravel kód áttekintéséhez és meglévő kódok refaktorálásához a legjobb gyakorlatok szerint. Minden Laravel háttér PHP kódmintát érintő feladathoz.livewire-development— Használd minden olyan feladathoz vagy kérdéshez, amely a Livewire-t érinti. Aktiváld, ha a felhasználó említi a Livewire-t, a wire: direktívákat, vagy Livewire-specifikus koncepciókat, mint a wire:model, wire:click. Lefedi az új komponensek építését, reaktivitási hibák keresését, valós idejű form validációt, betöltési állapotokat, a Livewire 2-ről 3-ra való migrációt, komponens formátumok konvertálását és teljesítményoptimalizálást. Ne használd nem-Livewire reaktív UI-hoz (React, Vue, csak Alpine, Inertia.js) vagy standard Laravel formokhoz Livewire nélkül.pest-testing— Ezt a képességet kizárólag Pest PHP teszteléshez használd Laravel projektekben. Aktiváld, amikor tesztet írsz, szerkesztesz, javítasz vagy refaktorálsz — beleértve a kódmódosítás után eltört tesztek javítását, asszerciók hozzáadását, PHPUnit tesztek Pest-re konvertálását, datasetek hozzáadását és TDD munkafolyamatokat. Mindig aktiváld, ha a felhasználó Pest-ben való írásról kérdez, teszt fájlokat vagy könyvtárakat említ (tests/Feature, tests/Unit), vagy architektúra teszteket. Lefedi az it()/expect() szintaxist, dataseteket, mockolást, böngésző tesztelést, arch()-ot, Livewire komponens teszteket, RefreshDatabase-t és minden Pest 4 funkciót. Ne használd factory-k, seeder-ek, migrációk, kontrollerek, modellek vagy nem teszt jellegű PHP kódok szerkesztéséhez.tailwindcss-development— Mindig aktiváld, ha a felhasználó üzenete bármilyen formában tartalmazza a 'tailwind' szót. Továbbá használd: responzív rács elrendezések (többoszlopos kártya rácsok, termék rácsok), flex/grid oldalstruktúrák (oldalsávos dashboardok, fix fejlécek, mobil-navigáció), UI komponensek stílusozása (kártyák, táblázatok, navigációs sávok, árazási szakaszok, formok, inputok, jelvények), sötét mód variánsok hozzáadása, térköz vagy tipográfia javítása, valamint Tailwind v3/v4 munkák esetén. Fő felhasználási eset: Tailwind utility osztályok írása vagy javítása HTML sablonokban (Blade, JSX, Vue). Hagyd ki háttér PHP logika, adatbázis lekérdezések, API útvonalak, HTML/CSS komponens nélküli JavaScript, CSS fájl auditok, build eszköz konfiguráció és vanilla CSS esetén.
Konvenciók
- Követned kell az alkalmazásban használt összes meglévő kódkonvenciót. Fájl létrehozásakor vagy szerkesztésekor ellenőrizd a szomszédos fájlokat a helyes struktúra, megközelítés és elnevezés érdekében.
- Használj leíró neveket a változókhoz és metódusokhoz. Például:
isRegisteredForDiscounts, nem pedigdiscount(). - Új komponens írása előtt ellenőrizd a meglévő komponenseket az újrahasznosíthatóság érdekében.
Ellenőrző szkriptek
- Ne készíts ellenőrző szkripteket vagy kísérletezz, ha a tesztek lefedik az adott funkciót és bizonyítják a működését. Az egység- és funkcionális tesztek fontosabbak.
Alkalmazás struktúra és architektúra
- Tartsd magad a meglévő könyvtárstruktúrához; ne hozz létre új alapkatalógusokat jóváhagyás nélkül.
- Ne változtasd meg az alkalmazás függőségeit jóváhagyás nélkül.
Frontend csomagolás
- Ha a felhasználó nem látja a frontend változást a felületen, az jelentheti azt, hogy futtatnia kell az
npm run build,npm run devvagycomposer run devparancsot. Kérdezz rá.
Dokumentációs fájlok
- Dokumentációs fájlokat csak akkor hozz létre, ha a felhasználó kifejezetten kéri.
Válaszok
- Légy tömör a magyarázatokban - fókuszálj a fontos dolgokra, ahelyett, hogy nyilvánvaló részleteket magyaráznál.
=== boost szabályok ===
Laravel Boost
Eszközök
- A Laravel Boost egy kifejezetten ehhez az alkalmazáshoz tervezett eszközökkel rendelkező MCP szerver. Preferáld a Boost eszközöket a manuális alternatívákkal szemben, mint a shell parancsok vagy fájlbeolvasások.
- Használd a
database-queryeszközt csak olvasható lekérdezések futtatásához az adatbázison, ahelyett, hogy nyers SQL-t írnál a tinkerbe. - Használd a
database-schemaeszközt a táblák szerkezetének vizsgálatához migrációk vagy modellek írása előtt. - Használd a
get-absolute-urleszközt a projekt URL-jeinek helyes sémájának, domainjének és portjának feloldásához. Mindig használd ezt, mielőtt URL-t osztanál meg a felhasználóval. - Használd a
browser-logseszközt a böngésző naplók, hibák és kivételek beolvasásához. Csak a friss naplók hasznosak, hagyd figyelmen kívül a régi bejegyzéseket.
Dokumentáció keresése (FONTOS)
- Kódmódosítás előtt mindig használd a
search-docseszközt. Ne hagyd ki ezt a lépést. Ez automatikusan a telepített csomagok alapján ad verzióspecifikus dokumentációt. - Adj át egy
packagestömböt az eredmények szűkítéséhez, ha tudod, mely csomagok relevánsak. - Használj több széles, téma alapú keresést:
['rate limiting', 'routing rate limiting', 'routing']. Számíts rá, hogy a legrelevánsabb eredmények lesznek elöl. - Ne adj csomagneveket a kereséshez, mert a csomaginformáció már meg van osztva. Használd a
test resource tablekifejezést, ne afilament 4 test resource table-t.
Keresési szintaxis
- Használj szavakat az automatikusan csonkolt ÉS logikához: a
rate limittalálatot ad a "rate" ÉS "limit" szavakra is. - Használj
"idézőjeles kifejezéseket"a pontos pozícióillesztéshez: az"infinite scroll"megköveteli az egymás melletti szavakat a megadott sorrendben. - Kombináld a szavakat és kifejezéseket a vegyes kereséshez:
middleware "rate limit". - Használj több keresést a VAGY logikához:
queries=["authentication", "middleware"].
Artisan
- Futtasd az Artisan parancsokat közvetlenül a parancssorból (pl.
php artisan route:list). Használd aphp artisan listparancsot az elérhető parancsok felfedezéséhez, és aphp artisan [command] --helpparancsot a paraméterek ellenőrzéséhez. - Vizsgáld meg az útvonalakat a
php artisan route:listparanccsal. Szűrj:--method=GET,--name=users,--path=api,--except-vendor,--only-vendor. - Olvass be konfigurációs értékeket pont jelöléssel:
php artisan config:show app.name,php artisan config:show database.default. Vagy olvasd a konfigurációs fájlokat közvetlenül aconfig/könyvtárból. - A környezeti változók ellenőrzéséhez olvasd közvetlenül a
.envfájlt.
Tinker
- Futtass PHP kódot az alkalmazás környezetében hibakereséshez és teszteléshez. Ne hozz létre modelleket felhasználói jóváhagyás nélkül, preferáld a factory-kkal ellátott teszteket. Preferáld a meglévő Artisan parancsokat az egyedi tinker kódok helyett.
- Mindig használj szimpla idézőjeleket a shell kifejtés megakadályozására:
php artisan tinker --execute 'Your::code();'- Használj dupla idézőjelet a PHP stringekhez belül:
php artisan tinker --execute 'User::where("active", true)->count();'
- Használj dupla idézőjelet a PHP stringekhez belül:
=== php szabályok ===
PHP
- Mindig használj kapcsos zárójeleket a vezérlési szerkezeteknél, még az egysoros törzseknél is.
- Használd a PHP 8 konstruktor property promotion-t:
public function __construct(public GitHub $github) { }. Ne hagyj üres, nulla paraméteres__construct()metódusokat, hacsak a konstruktor nem privát. - Használj explicit visszatérési típus deklarációkat és típusjelzéseket minden metódus paraméternél:
function isAccessible(User $user, ?string $path = null): bool - Használj TitleCase-t az Enum kulcsokhoz:
FavoritePerson,BestLake,Monthly. - Preferáld a PHPDoc blokkokat az inline kommentekkel szemben. Csak kivételesen összetett logika esetén adj hozzá inline kommenteket.
- Használj array shape típusdefiníciókat a PHPDoc blokkokban.
=== laravel/core szabályok ===
Csináld a Laravel Útján
- Használd a
php artisan make:parancsokat új fájlok (pl. migrációk, kontrollerek, modellek stb.) létrehozásához. Az elérhető Artisan parancsokat aphp artisan listparanccsal listázhatod, és a paramétereiket aphp artisan [command] --helpparanccsal ellenőrizheted. - Ha generikus PHP osztályt hozol létre, használd a
php artisan make:classparancsot. - Minden Artisan parancsnak add át a
--no-interactionjelzőt a felhasználói beavatkozás nélküli működés érdekében. A helyes működéshez a megfelelő--optionsopciókat is meg kell adnod.
Modell létrehozás
- Új modellek létrehozásakor készíts hozzájuk hasznos factory-kat és seedereket is. Kérdezz rá a felhasználónál, ha másra is szükség van, a
php artisan make:model --helpsegítségével ellenőrizve az elérhető opciókat.
API-k és Eloquent Resource-ok
- API-k esetén alapértelmezés szerint használj Eloquent API Resource-okat és API verziózást, hacsak a meglévő API útvonalak nem másképp teszik, ekkor kövesd a meglévő alkalmazáskonvenciót.
URL generálás
- Más oldalakra mutató linkek generálásakor preferáld a nevesített útvonalakat és a
route()függvényt.
Tesztelés
- Modellek létrehozásakor a tesztekhez használd a modellek factory-jait. Ellenőrizd, hogy a factory rendelkezik-e egyedi állapotokkal (states), amelyeket használni lehet, mielőtt manuálisan állítanád be a modellt.
- Faker: Használj olyan metódusokat, mint a
$this->faker->word()vagy afake()->randomDigit(). Kövesd a meglévő konvenciókat, hogy a$this->faker-t vagy afake()-et használd. - Tesztek létrehozásakor használd a
php artisan make:test [opciók] {név}parancsot funkcionális teszt létrehozásához, és add át a--unitjelzőt egységteszt készítéséhez. A legtöbb tesztnek funkcionális tesztnek kell lennie.
Vite hiba
- Ha "Illuminate\Foundation\ViteException: Unable to locate file in Vite manifest" hibát kapsz, futtathatod az
npm run buildparancsot, vagy kérd meg a felhasználót, hogy futtassa aznpm run devvagy acomposer run devparancsot.
=== laravel/v12 szabályok ===
Laravel 12
- KRITIKUS: MINDIG használd a
search-docseszközt a verzióspecifikus Laravel dokumentációhoz és frissített kódpéldákhoz. - Ez a projekt a Laravel 10-ről lett frissítve az új, áramvonalasított Laravel fájlstruktúrára való áttérés nélkül.
- Ez teljesen rendben van és a Laravel által ajánlott. Kövesd a Laravel 10-ből származó meglévő struktúrát. Nem kell áttérnünk az új Laravel struktúrára, hacsak a felhasználó kifejezetten nem kéri.
Laravel 10 struktúra
- A middleware-ek jellemzően az
app\Http/Middleware/mappában, a service providerek pedig azapp\Providers/mappában találhatók. - Nincs
bootstrap/app.phpalkalmazáskonfiguráció a Laravel 10 struktúrában:- A middleware regisztráció az
app\Http/Kernel.phpfájlban történik. - A kivételkezelés az
app\Exceptions/Handler.phpfájlban található. - A konzol parancsok és az ütemezés az
app\Console/Kernel.phpfájlban vannak regisztrálva. - A sebességkorlátok (rate limits) valószínűleg a
RouteServiceProvider-ben vagy azapp\Http/Kernel.php-ban találhatók.
- A middleware regisztráció az
Adatbázis
- Oszlop módosításakor a migrációnak tartalmaznia kell az oszlophoz korábban definiált összes attribútumot. Ellenkező esetben azok elvesznek.
- A Laravel 12 natívan lehetővé teszi az eager loaded rekordok korlátozását külső csomagok nélkül:
$query->latest()->limit(10);.
Modellek
- A castok beállíthatók és célszerű is beállítani a modell
casts()metódusában a$caststulajdonság helyett. Kövesd a többi modell meglévő konvencióit.
=== livewire/core szabályok ===
Livewire
- A Livewire lehetővé teszi dinamikus, reaktív felületek építését PHP-ben, JavaScript írása nélkül.
- Az Alpine.js-t használhatod kliensoldali interakciókhoz JavaScript keretrendszerek helyett.
- Tartsd az állapotot a szerver oldalon, hogy a UI azt tükrözze. Validálj és autorizálj az action-ökben, ahogy a HTTP kéréseknél tennéd.
=== pest/core szabályok ===
Pest
- Ez a projekt a Pest-et használja teszteléshez. Hozz létre teszteket:
php artisan make:test --pest {név}. - Futtasd a teszteket:
php artisan test --compactvagy szűrj:php artisan test --compact --filter=tesztNeve. - NE törölj teszteket jóváhagyás nélkül.