[{"data":1,"prerenderedAt":1685},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-getting-started-coming-from-laravel":442,"-hu-getting-started-coming-from-laravel-surround":1680},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":16,"body":444,"description":1673,"extension":1674,"links":1675,"meta":1676,"navigation":1677,"path":17,"seo":1678,"stem":18,"__hash__":1679},"docs_hu\u002Fhu\u002F1.getting-started\u002F2.coming-from-laravel.md",{"type":445,"value":446,"toc":1666},"minimark",[447,456,468,473,900,904,911,1091,1094,1485,1499,1503,1509,1600,1604,1636,1640,1662],[448,449,450,451,455],"p",{},"Ha Laravelen dolgoztál, a gpsystem legtöbb építőköve ismerős lesz: több csomag kimondottan a Laravel-megfelelője mintájára készült. Ez az oldal megmutatja, mi minek felel meg, és őszintén azt is, mi ",[452,453,454],"strong",{},"nem"," transzferálódik.",[448,457,458,459,463,464,467],{},"Ami átjön: a gondolkodás az eventekről, listenerekről, policy-król, ütemezésről és a queue-król egy az egyben. Ami nem: nincs ORM-mágia (nincs Eloquent, a repository-kban SQL-t vagy bun query buildert írsz), nincs container-autowiring (a függőségek egy explicit ",[460,461,462],"code",{},"Dependencies"," structban utaznak, amit a ",[460,465,466],{},"main.go","-ban te töltesz ki), és nincs globális facade sem: minden függés látható és követhető.",[469,470,472],"h2",{"id":471},"megfeleltetési-tábla","Megfeleltetési tábla",[474,475,476,492],"table",{},[477,478,479],"thead",{},[480,481,482,486,489],"tr",{},[483,484,485],"th",{},"Laravel",[483,487,488],{},"gpsystem",[483,490,491],{},"Hol",[493,494,495,523,545,570,588,609,623,638,655,672,684,704,727,754,774,791,814,827,849,868,884],"tbody",{},[480,496,497,505,518],{},[498,499,500,501,504],"td",{},"Task Scheduling (",[460,502,503],{},"$schedule->daily()",")",[498,506,507,510,511,514,515,504],{},[460,508,509],{},"scheduler.Schedule"," fluent API (",[460,512,513],{},"sched.DailyAt(...)",", ",[460,516,517],{},"sched.Job(...)",[498,519,520],{},[521,522,77],"a",{"href":78},[480,524,525,531,541],{},[498,526,527,528],{},"Events & Listeners, ",[460,529,530],{},"ShouldQueue",[498,532,533,536,537,540],{},[460,534,535],{},"events.Event"," + ",[460,538,539],{},"events.Listen"," (minden listener önálló, újrapróbált task)",[498,542,543],{},[521,544,67],{"href":68},[480,546,547,554,563],{},[498,548,549,550,553],{},"Queues, ",[460,551,552],{},"queue:work",", Horizon",[498,555,556,558,559,562],{},[460,557,46],{}," (asynq + Valkey) + ",[460,560,561],{},"cmd\u002Fworker"," bináris",[498,564,565,514,568],{},[521,566,567],{"href":53},"Queue",[521,569,263],{"href":264},[480,571,572,578,584],{},[498,573,574,575,504],{},"Policies (",[460,576,577],{},"$this->authorize()",[498,579,580,583],{},[460,581,582],{},"policy.Registry"," + generált enforcer middleware, fail-closed",[498,585,586],{},[521,587,98],{"href":99},[480,589,590,593,605],{},[498,591,592],{},"Gates, szerepek (spatie\u002Fpermission)",[498,594,595,514,598,601,602],{},[460,596,597],{},"rbac.Identity",[460,599,600],{},"RequireRole"," \u002F ",[460,603,604],{},"RequirePermission",[498,606,607],{},[521,608,93],{"href":94},[480,610,611,614,619],{},[498,612,613],{},"Auth guardok, Sanctum tokenek",[498,615,616,618],{},[460,617,82],{}," (JWT kibocsátás és middleware)",[498,620,621],{},[521,622,88],{"href":89},[480,624,625,628,634],{},[498,626,627],{},"Monolog (dev channel)",[498,629,630,633],{},[460,631,632],{},"logx\u002Fmonolog"," (Monolog-formátumú konzol-handler)",[498,635,636],{},[521,637,183],{"href":184},[480,639,640,645,651],{},[498,641,642],{},[460,643,644],{},"php artisan migrate",[498,646,647,650],{},[460,648,649],{},"go run .\u002Fcmd\u002Fmigrate"," (beágyazott, számozott SQL)",[498,652,653],{},[521,654,272],{"href":273},[480,656,657,662,668],{},[498,658,659],{},[460,660,661],{},"DB::transaction(fn)",[498,663,664,667],{},[460,665,666],{},"Transactor.WithinTransaction(ctx, fn)"," (a tranzakció a contextben utazik)",[498,669,670],{},[521,671,422],{"href":423},[480,673,674,677,680],{},[498,675,676],{},"FormRequest szabályok",[498,678,679],{},"validator struct-tagek + generált request-típusok",[498,681,682],{},[521,683,400],{"href":401},[480,685,686,695,700],{},[498,687,688,689,601,692],{},"Exception ",[460,690,691],{},"render()",[460,693,694],{},"report()",[498,696,697,699],{},[460,698,358],{}," kódok + public üzenet → RFC 9457 problem+json \u002F Sentry",[498,701,702],{},[521,703,224],{"href":225},[480,705,706,714,723],{},[498,707,708,536,711],{},[460,709,710],{},"config()",[460,712,713],{},".env",[498,715,716,719,720,722],{},[460,717,718],{},"envconf.MustLoad[T]"," (típusos struct env-ből, ",[460,721,713],{},"-támogatással)",[498,724,725],{},[521,726,204],{"href":229},[480,728,729,732,749],{},[498,730,731],{},"Storage facade, flysystem diskek",[498,733,734,735,737,738,741,742,741,745,748],{},"a ",[460,736,147],{}," modul ",[460,739,740],{},"Driver","\u002F",[460,743,744],{},"Disk",[460,746,747],{},"Manager"," modellje + S3-driver",[498,750,751],{},[521,752,753],{"href":153},"Tárolás",[480,755,756,759,769],{},[498,757,758],{},"Mailables, markdown mail",[498,760,761,764,765,768],{},[460,762,763],{},"mail.Message"," builder + MJML template-ek; ",[460,766,767],{},"Mail::fake()"," ↔ memória-mailer",[498,770,771],{},[521,772,773],{"href":119},"E-mail",[480,775,776,781,786],{},[498,777,778],{},[460,779,780],{},"php artisan make:*",[498,782,783],{},[460,784,785],{},"go tool gpsystem new\u002Fadd ...",[498,787,788],{},[521,789,790],{"href":287},"CLI",[480,792,793,801,809],{},[498,794,795,601,798],{},[460,796,797],{},"paginate()",[460,799,800],{},"cursorPaginate()",[498,802,803,601,806],{},[460,804,805],{},"paginate.Page[T]",[460,807,808],{},"paginate.CursorPage[T]",[498,810,811],{},[521,812,813],{"href":436},"Lapozás",[480,815,816,819,822],{},[498,817,818],{},"Eloquent ORM",[498,820,821],{},"pgx (SQL) vagy bun (query builder), nincs ActiveRecord-szimuláció",[498,823,824],{},[521,825,826],{"href":411},"Adatbázis",[480,828,829,836,845],{},[498,830,831,832,835],{},"Route regisztráció (",[460,833,834],{},"routes\u002Fapi.php",", auto-discovery)",[498,837,838,841,842,844],{},[460,839,840],{},"Register\u003CSurface>(router, deps)"," (explicit hívás a ",[460,843,466],{},"-ban)",[498,846,847],{},[521,848,220],{"href":221},[480,850,851,854,864],{},[498,852,853],{},"Route-csoport \u002F külön controller-készlet közönségenként (publikus API vs admin)",[498,855,856,859,860,863],{},[452,857,858],{},"surface"," (felület-köteg): ",[460,861,862],{},"surfaces\u002F\u003Csurface>\u002F",", saját kontrakttal és middleware-rel",[498,865,866],{},[521,867,330],{"href":331},[480,869,870,873,880],{},[498,871,872],{},"Model-metódusok + közös service-logika",[498,874,875,876,879],{},"a modul ",[460,877,878],{},"core\u002F"," csomagja (egyszer leírt szabályok, minden surface hívja)",[498,881,882],{},[521,883,35],{"href":36},[480,885,886,889,896],{},[498,887,888],{},"Query-réteg (Eloquent scope-ok, query builder hívások)",[498,890,891,892,895],{},"a modul-szintű ",[460,893,894],{},"repository\u002F",": modulonként egy, minden surface közösen használja",[498,897,898],{},[521,899,35],{"href":36},[469,901,903],{"id":902},"két-példa-egymás-mellett","Két példa egymás mellett",[448,905,906,907,910],{},"Ütemezett feladat: a ",[460,908,909],{},"->onOneServer()"," viselkedése itt alapértelmezés (Valkey-lease leader election):",[912,913,914,987],"code-group",{},[915,916,922],"pre",{"className":917,"code":918,"filename":919,"language":920,"meta":921,"style":921},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Schedule::command('report:nightly-sales')\n    ->dailyAt('03:00')\n    ->onOneServer();\n","Laravel: routes\u002Fconsole.php","php","",[460,923,924,956,976],{"__ignoreMap":921},[925,926,929,933,937,941,944,947,951,953],"span",{"class":927,"line":928},"line",1,[925,930,932],{"class":931},"sBMFI","Schedule",[925,934,936],{"class":935},"sMK4o","::",[925,938,940],{"class":939},"s2Zo4","command",[925,942,943],{"class":935},"(",[925,945,946],{"class":935},"'",[925,948,950],{"class":949},"sfazB","report:nightly-sales",[925,952,946],{"class":935},[925,954,955],{"class":935},")\n",[925,957,959,962,965,967,969,972,974],{"class":927,"line":958},2,[925,960,961],{"class":935},"    ->",[925,963,964],{"class":939},"dailyAt",[925,966,943],{"class":935},[925,968,946],{"class":935},[925,970,971],{"class":949},"03:00",[925,973,946],{"class":935},[925,975,955],{"class":935},[925,977,979,981,984],{"class":927,"line":978},3,[925,980,961],{"class":935},[925,982,983],{"class":939},"onOneServer",[925,985,986],{"class":935},"();\n",[915,988,993],{"className":989,"code":990,"filename":991,"language":992,"meta":921,"style":921},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","func Register(sched *scheduler.Schedule, deps shop.Dependencies) {\n    sched.Job(\"shop.nightlySalesReport\", \"0 3 * * *\",\n        nightlySalesReport(deps))\n}\n","gpsystem: internal\u002Fmodules\u002Fshop\u002Fjobs\u002Fregister.go","go",[460,994,995,1038,1072,1085],{"__ignoreMap":921},[925,996,997,1000,1003,1005,1009,1012,1015,1018,1020,1023,1026,1029,1031,1033,1035],{"class":927,"line":928},[925,998,999],{"class":935},"func",[925,1001,1002],{"class":939}," Register",[925,1004,943],{"class":935},[925,1006,1008],{"class":1007},"sHdIc","sched",[925,1010,1011],{"class":935}," *",[925,1013,1014],{"class":931},"scheduler",[925,1016,1017],{"class":935},".",[925,1019,932],{"class":931},[925,1021,1022],{"class":935},",",[925,1024,1025],{"class":1007}," deps",[925,1027,1028],{"class":931}," shop",[925,1030,1017],{"class":935},[925,1032,462],{"class":931},[925,1034,504],{"class":935},[925,1036,1037],{"class":935}," {\n",[925,1039,1040,1044,1046,1049,1051,1054,1057,1059,1061,1064,1067,1069],{"class":927,"line":958},[925,1041,1043],{"class":1042},"sTEyZ","    sched",[925,1045,1017],{"class":935},[925,1047,1048],{"class":939},"Job",[925,1050,943],{"class":935},[925,1052,1053],{"class":935},"\"",[925,1055,1056],{"class":949},"shop.nightlySalesReport",[925,1058,1053],{"class":935},[925,1060,1022],{"class":935},[925,1062,1063],{"class":935}," \"",[925,1065,1066],{"class":949},"0 3 * * *",[925,1068,1053],{"class":935},[925,1070,1071],{"class":935},",\n",[925,1073,1074,1077,1079,1082],{"class":927,"line":978},[925,1075,1076],{"class":939},"        nightlySalesReport",[925,1078,943],{"class":935},[925,1080,1081],{"class":1042},"deps",[925,1083,1084],{"class":935},"))\n",[925,1086,1088],{"class":927,"line":1087},4,[925,1089,1090],{"class":935},"}\n",[448,1092,1093],{},"Policy (kérésenkénti tulajdonos-ellenőrzés, amikor a szerep önmagában kevés):",[912,1095,1096,1227],{},[915,1097,1100],{"className":917,"code":1098,"filename":1099,"language":920,"meta":921,"style":921},"class OrderPolicy\n{\n    public function view(User $user, Order $order): bool\n    {\n        return $user->id === $order->user_id\n            || $user->hasRole('admin');\n    }\n}\n","Laravel: app\u002FPolicies\u002FOrderPolicy.php",[460,1101,1102,1111,1116,1155,1160,1189,1216,1222],{"__ignoreMap":921},[925,1103,1104,1108],{"class":927,"line":928},[925,1105,1107],{"class":1106},"spNyl","class",[925,1109,1110],{"class":931}," OrderPolicy\n",[925,1112,1113],{"class":927,"line":958},[925,1114,1115],{"class":935},"{\n",[925,1117,1118,1121,1124,1127,1129,1132,1135,1138,1140,1143,1145,1148,1151],{"class":927,"line":978},[925,1119,1120],{"class":1106},"    public",[925,1122,1123],{"class":1106}," function",[925,1125,1126],{"class":939}," view",[925,1128,943],{"class":935},[925,1130,1131],{"class":931},"User",[925,1133,1134],{"class":935}," $",[925,1136,1137],{"class":1042},"user",[925,1139,1022],{"class":935},[925,1141,1142],{"class":931}," Order",[925,1144,1134],{"class":935},[925,1146,1147],{"class":1042},"order",[925,1149,1150],{"class":935},"):",[925,1152,1154],{"class":1153},"sbssI"," bool\n",[925,1156,1157],{"class":927,"line":1087},[925,1158,1159],{"class":935},"    {\n",[925,1161,1163,1167,1169,1171,1174,1177,1180,1182,1184,1186],{"class":927,"line":1162},5,[925,1164,1166],{"class":1165},"s7zQu","        return",[925,1168,1134],{"class":935},[925,1170,1137],{"class":1042},[925,1172,1173],{"class":935},"->",[925,1175,1176],{"class":1042},"id ",[925,1178,1179],{"class":935},"===",[925,1181,1134],{"class":935},[925,1183,1147],{"class":1042},[925,1185,1173],{"class":935},[925,1187,1188],{"class":1042},"user_id\n",[925,1190,1192,1195,1197,1199,1201,1204,1206,1208,1211,1213],{"class":927,"line":1191},6,[925,1193,1194],{"class":935},"            ||",[925,1196,1134],{"class":935},[925,1198,1137],{"class":1042},[925,1200,1173],{"class":935},[925,1202,1203],{"class":939},"hasRole",[925,1205,943],{"class":935},[925,1207,946],{"class":935},[925,1209,1210],{"class":949},"admin",[925,1212,946],{"class":935},[925,1214,1215],{"class":935},");\n",[925,1217,1219],{"class":927,"line":1218},7,[925,1220,1221],{"class":935},"    }\n",[925,1223,1225],{"class":927,"line":1224},8,[925,1226,1090],{"class":935},[915,1228,1231],{"className":989,"code":1229,"filename":1230,"language":992,"meta":921,"style":921},"func New() *kitpolicy.Registry {\n    reg := kitpolicy.NewRegistry()\n    reg.Register(\"orders.view\", func(ctx context.Context, id *rbac.Identity, req any) error {\n        if id.HasRole(\"admin\") {\n            return nil\n        }\n        r := req.(gen.GetOrderRequest)\n        if !ownsOrder(ctx, id, r.OrderId) {\n            return kitpolicy.Deny(\"You can only view your own orders.\")\n        }\n        return nil\n    })\n    return reg\n}\n","gpsystem: internal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fpolicy\u002Fpolicy.go",[460,1232,1233,1255,1274,1339,1363,1371,1376,1398,1430,1453,1458,1465,1471,1480],{"__ignoreMap":921},[925,1234,1235,1237,1240,1243,1245,1248,1250,1253],{"class":927,"line":928},[925,1236,999],{"class":935},[925,1238,1239],{"class":939}," New",[925,1241,1242],{"class":935},"()",[925,1244,1011],{"class":935},[925,1246,1247],{"class":931},"kitpolicy",[925,1249,1017],{"class":935},[925,1251,1252],{"class":931},"Registry",[925,1254,1037],{"class":935},[925,1256,1257,1260,1263,1266,1268,1271],{"class":927,"line":958},[925,1258,1259],{"class":1042},"    reg ",[925,1261,1262],{"class":935},":=",[925,1264,1265],{"class":1042}," kitpolicy",[925,1267,1017],{"class":935},[925,1269,1270],{"class":939},"NewRegistry",[925,1272,1273],{"class":935},"()\n",[925,1275,1276,1279,1281,1284,1286,1288,1291,1293,1295,1298,1301,1304,1306,1309,1311,1314,1316,1319,1321,1324,1326,1329,1332,1334,1337],{"class":927,"line":978},[925,1277,1278],{"class":1042},"    reg",[925,1280,1017],{"class":935},[925,1282,1283],{"class":939},"Register",[925,1285,943],{"class":935},[925,1287,1053],{"class":935},[925,1289,1290],{"class":949},"orders.view",[925,1292,1053],{"class":935},[925,1294,1022],{"class":935},[925,1296,1297],{"class":935}," func(",[925,1299,1300],{"class":1007},"ctx",[925,1302,1303],{"class":931}," context",[925,1305,1017],{"class":935},[925,1307,1308],{"class":931},"Context",[925,1310,1022],{"class":935},[925,1312,1313],{"class":1007}," id",[925,1315,1011],{"class":935},[925,1317,1318],{"class":931},"rbac",[925,1320,1017],{"class":935},[925,1322,1323],{"class":931},"Identity",[925,1325,1022],{"class":935},[925,1327,1328],{"class":1007}," req",[925,1330,1331],{"class":931}," any",[925,1333,504],{"class":935},[925,1335,1336],{"class":1106}," error",[925,1338,1037],{"class":935},[925,1340,1341,1344,1346,1348,1351,1353,1355,1357,1359,1361],{"class":927,"line":1087},[925,1342,1343],{"class":1165},"        if",[925,1345,1313],{"class":1042},[925,1347,1017],{"class":935},[925,1349,1350],{"class":939},"HasRole",[925,1352,943],{"class":935},[925,1354,1053],{"class":935},[925,1356,1210],{"class":949},[925,1358,1053],{"class":935},[925,1360,504],{"class":935},[925,1362,1037],{"class":935},[925,1364,1365,1368],{"class":927,"line":1162},[925,1366,1367],{"class":1165},"            return",[925,1369,1370],{"class":935}," nil\n",[925,1372,1373],{"class":927,"line":1191},[925,1374,1375],{"class":935},"        }\n",[925,1377,1378,1381,1383,1385,1388,1391,1393,1396],{"class":927,"line":1218},[925,1379,1380],{"class":1042},"        r ",[925,1382,1262],{"class":935},[925,1384,1328],{"class":1042},[925,1386,1387],{"class":935},".(",[925,1389,1390],{"class":931},"gen",[925,1392,1017],{"class":935},[925,1394,1395],{"class":931},"GetOrderRequest",[925,1397,955],{"class":935},[925,1399,1400,1402,1405,1408,1410,1412,1414,1416,1418,1421,1423,1426,1428],{"class":927,"line":1224},[925,1401,1343],{"class":1165},[925,1403,1404],{"class":935}," !",[925,1406,1407],{"class":939},"ownsOrder",[925,1409,943],{"class":935},[925,1411,1300],{"class":1042},[925,1413,1022],{"class":935},[925,1415,1313],{"class":1042},[925,1417,1022],{"class":935},[925,1419,1420],{"class":1042}," r",[925,1422,1017],{"class":935},[925,1424,1425],{"class":1042},"OrderId",[925,1427,504],{"class":935},[925,1429,1037],{"class":935},[925,1431,1433,1435,1437,1439,1442,1444,1446,1449,1451],{"class":927,"line":1432},9,[925,1434,1367],{"class":1165},[925,1436,1265],{"class":1042},[925,1438,1017],{"class":935},[925,1440,1441],{"class":939},"Deny",[925,1443,943],{"class":935},[925,1445,1053],{"class":935},[925,1447,1448],{"class":949},"You can only view your own orders.",[925,1450,1053],{"class":935},[925,1452,955],{"class":935},[925,1454,1456],{"class":927,"line":1455},10,[925,1457,1375],{"class":935},[925,1459,1461,1463],{"class":927,"line":1460},11,[925,1462,1166],{"class":1165},[925,1464,1370],{"class":935},[925,1466,1468],{"class":927,"line":1467},12,[925,1469,1470],{"class":935},"    })\n",[925,1472,1474,1477],{"class":927,"line":1473},13,[925,1475,1476],{"class":1165},"    return",[925,1478,1479],{"class":1042}," reg\n",[925,1481,1483],{"class":927,"line":1482},14,[925,1484,1090],{"class":935},[448,1486,1487,1488,1490,1491,1494,1495,1498],{},"Egy lényegi különbség: Laravelben a policy-t a controllerből hívod (",[460,1489,577],{},"), és el is felejthető. Itt a policy-t a TypeSpec-kontraktus ",[460,1492,1493],{},"@policy"," dekorátora rendeli a művelethez, az enforcer middleware pedig a generált táblából kényszeríti ki. A megjelölt, de nem regisztrált policy nem átenged, hanem hibázik (",[521,1496,1497],{"href":99},"fail-closed",").",[469,1500,1502],{"id":1501},"viselkedésbeli-különbségek","Viselkedésbeli különbségek",[448,1504,1505,1506,1508],{},"A mapping-tábla azt mutatja, mi minek felel meg. Ez a szakasz azt mutatja meg, hol ",[452,1507,454],{}," azonos a viselkedés, ha a felszíni hasonlóság mögé nézel.",[1510,1511,1512,1544,1568,1580,1592],"ul",{},[1513,1514,1515,1518,1519,1522,1523,1526,1527,1530,1531,1534,1535,1537,1538,1541,1542,1017],"li",{},[452,1516,1517],{},"Tranzakciók."," Laravelben a tranzakciót egy globális connection-menedzser tartja számon: bármely modell-hívás automatikusan benne fut, a ",[460,1520,1521],{},"DB::transaction"," pedig deadlock esetén újrapróbálkozik (",[460,1524,1525],{},"attempts"," paraméter), a rollbackot kivétel váltja ki. gpsystemben a tranzakciót a ",[452,1528,1529],{},"context"," hordozza (",[460,1532,1533],{},"Transactor.WithinTransaction","): csak az a hívás vesz részt benne, amelyik a closure ",[460,1536,1300],{},"-ét kapja; nincs automatikus deadlock-retry (a döntés a tiéd); a rollbackot sima ",[460,1539,1540],{},"error"," visszaadása váltja ki, nem kivétel. Részletek: ",[521,1543,422],{"href":423},[1513,1545,1546,1549,1550,1553,1554,1557,1558,1561,1562,1565,1566,1017],{},[452,1547,1548],{},"Migrációk."," A ",[460,1551,1552],{},"goose_db_version"," tábla a Laravel ",[460,1555,1556],{},"migrations"," táblájának felel meg, de nincs schema builder: sima SQL fut. Ez tudatos trade-off: a builder adatbázisok közti hordozhatóságot ad, amire itt nincs szükség (a kit PostgreSQL-re épül), cserébe elfedi a tényleges DDL-t. Sima SQL-lel elérhető PostgreSQL teljes felülete (partial indexek, ",[460,1559,1560],{},"GENERATED"," oszlopok, CTE-s backfillek), amit egy schema builder csak ",[460,1563,1564],{},"DB::statement","-tel tudna. Részletek: ",[521,1567,272],{"href":273},[1513,1569,1570,1573,1574,1577,1578,1017],{},[452,1571,1572],{},"Események és a fan-out."," A gpsystem minden listenert ",[452,1575,1576],{},"önálló, saját retry-kerettel futó asynq taskként"," kezel: egy event N listener-taskra terül szét, egy hibázó listener újrapróbálkozása sosem futtatja újra a többit. Ez a lényegi eltérés a Laravel szinkron event-loopjától (ahol egy listener kivétele megállíthatja a többit is), és az ára az idempotencia-követelmény minden listeneren. Részletek: ",[521,1579,67],{"href":68},[1513,1581,1582,1585,1586,1589,1590,1017],{},[452,1583,1584],{},"Tranzakciós outbox."," Laravelben nincs beépített megoldás a dual-write problémára: az ",[460,1587,1588],{},"afterCommit"," a rollback-esetet kezeli, de a commit-utáni crash-ablakot (a folyamat a DB-commit és az event-enqueue közt hal le) nem zárja be; aki garanciát akar, ott is egy külön outbox-csomagot húz be. gpsystemben ez gyárilag jön: az outbox az eventet ugyanabba az adatbázisba, ugyanabban a tranzakcióban írja, mint az üzleti változást. Részletek: ",[521,1591,72],{"href":73},[1513,1593,1594,1597,1598,1017],{},[452,1595,1596],{},"OpenTelemetry."," Ennek nincs igazi PHP-s megfelelője: a Laravel-ökoszisztémában a Telescope dev-only eszköz, a production APM pedig fizetős szolgáltatások (Blackfire, New Relic) területe. A Go-ökoszisztémában az elosztott trace-elés standard, gyártófüggetlen infrastruktúra, amit a kit egy hívással bekapcsol. Részletek: ",[521,1599,188],{"href":189},[469,1601,1603],{"id":1602},"mi-nincs-és-miért","Mi nincs, és miért",[1510,1605,1606,1615,1630],{},[1513,1607,1608,1611,1612,1614],{},[452,1609,1610],{},"Nincs Eloquent."," A repository-réteg pgx-szel (SQL) vagy bunnal (query builder) dolgozik, a Go-ökoszisztémában az explicit lekérdezés a bevett út, és a kit nem próbál ActiveRecordot szimulálni. A ",[521,1613,418],{"href":419}," opcionális adapter, ha a query builder kényelmét szeretnéd.",[1513,1616,1617,1549,1620,1622,1623,1625,1626,1629],{},[452,1618,1619],{},"Nincs service container.",[460,1621,462],{}," struct kézzel épül a ",[460,1624,466],{},"-ban. Cserébe a \"honnan jön ez a függőség?\" kérdésre mindig egy ",[460,1627,1628],{},"cmd\u002F\u003Cmodul>\u002Fmain.go","-beli sor a válasz.",[1513,1631,1632,1635],{},[452,1633,1634],{},"Nincs Blade."," A kit API-backendekre fókuszál; a szerveroldali renderelés nem része.",[469,1637,1639],{"id":1638},"háttér","Háttér",[448,1641,1642,1643,1646,1647,1650,1651,1654,1655,1661],{},"A kit szerzőjének motivációja pont az volt, hogy ",[452,1644,1645],{},"a Go-ökoszisztémában is legyen egy, a Laravelhez hasonlóan könnyen használható rendszer",": ahol a projekt első napján üzleti logikát írsz, nem infrastruktúrát válogatsz. A Go-világ ereje a kis, egymástól független, jól tesztelt library-kben van. A gpsystem nem lecserélni akarja ezeket, hanem egyetlen, összecsiszolt és karbantartott kompozíciót adni belőlük, a Laravelből ismerős fogalmi kerettel. Ezért látod mindenhol a párhuzamokat, és ezért nem rejti el a kit az alatta lévő library-ket: a library-fél egy ",[452,1648,1649],{},"microservice chassis",", a generált projekt egy ",[452,1652,1653],{},"service template"," (",[521,1656,1660],{"href":1657,"rel":1658},"https:\u002F\u002Fmicroservices.io\u002Fpatterns\u002Fmicroservice-chassis.html",[1659],"nofollow","Richardson","), nem egy futásidejű réteg, ami az app fölött él. A cél a kényelmes indulás, nem egy új, zárt keretrendszer.",[1663,1664,1665],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":921,"searchDepth":958,"depth":958,"links":1667},[1668,1669,1670,1671,1672],{"id":471,"depth":958,"text":472},{"id":902,"depth":958,"text":903},{"id":1501,"depth":958,"text":1502},{"id":1602,"depth":958,"text":1603},{"id":1638,"depth":958,"text":1639},"Fogalomról fogalomra megfeleltetés a Laravel és a gpsystem között.","md",null,{},{"icon":19},{"title":16,"description":1673},"J2J3sa0un5zOlxIhHaJITz3ghIM5f1AOcpM8GeWtO9k",[1681,1683],{"title":11,"path":12,"stem":13,"description":1682,"icon":14,"children":-1},"Mi a gpsystem, kinek szól, és mi marad a te kezedben.",{"title":21,"path":22,"stem":23,"description":1684,"icon":19,"children":-1},"Fogalomról fogalomra megfeleltetés a Symfony és a gpsystem között.",1785445877220]