ChatGPT 5.1 dla programistów PHP i Laravel: kompletny przewodnik
Czym jest ChatGPT 5.1 i dlaczego ma znaczenie dla programistów PHP i Laravel 12?
Jeśli interesuje Cię ChatGPT 5.1 dla programistów PHP i Laravel, to znaczy, że chcesz mniej klepać boilerplate, a więcej rozwiązywać realne problemy biznesowe. ChatGPT 5.1 to nie tylko „kolejna wersja ChatGPT”, ale nowy model z rodziny GPT-5.1, który stał się domyślnym „mózgiem” ChatGPT: jest inteligentniejszy, lepiej się komunikuje i daje dużo większą kontrolę nad stylem odpowiedzi oraz głębokością rozumowania.
Dla Ciebie jako dev-a PHP/Laravel 12 oznacza to przede wszystkim: szybsze pisanie kodu, sensowniejsze podpowiedzi architektoniczne i lepszą współpracę przy debugowaniu złożonych problemów. Ale po kolei.
GPT-5.1 w skrócie – co to za model i gdzie go spotykasz?
Część rodziny GPT-5, ale z konkretnym upgrade’em
GPT-5.1 to iteracyjna aktualizacja rodziny GPT-5 – nie „rewolucja marketingowa”, tylko realne poprawki w inteligencji, sposobie komunikacji i personalizacji. W ChatGPT to właśnie GPT-5.1 jest używany jako główny model do rozmów, a w API występuje jako flagowy model dla zadań wymagających rozumowania i kodowania.
W praktyce: kiedy odpalasz ChatGPT i wybierasz najnowszy model, pracujesz z GPT-5.1 (w jednej z jego odmian).
Dwa tryby pracy: Instant i Thinking
GPT-5.1 występuje w dwóch głównych wariantach, z którymi będziesz mieć styczność jako dev:
- GPT-5.1 Instant
- zoptymalizowany pod szybkość i niskie opóźnienia,
- idealny do prostych pytań, krótkich snippetów, szybkich podpowiedzi,
- wciąż bardzo dobry w kodowaniu, ale nie „przegrzewa się” nad prostymi sprawami.
- GPT-5.1 Thinking
- model nastawiony na złożone rozumowanie,
- lepszy wybór do trudnych bugów, większych refaktoryzacji, projektowania architektury,
- potrafi poświęcić więcej „czasu na myślenie” tam, gdzie naprawdę jest to potrzebne.
Nowością względem wcześniejszych modeli jest to, że GPT-5.1 stosuje adaptacyjne rozumowanie – sam dopasowuje głębokość analizy do trudności zadania, zamiast zawsze „filozofować” na pełnym gazie.
GPT-5.1 jako model w API – stricte pod kod i automatyzację
W dokumentacji OpenAI GPT-5.1 jest opisywany jako „flagowy model do zadań koderskich i agentowych, z konfigurowalnym rozumowaniem”.
Z punktu widzenia programisty PHP/Laravel oznacza to:
- możliwość kontrolowania poziomu rozumowania (parametr
reasoning_effort– odnonepo wyższe poziomy), - lepszą współpracę z narzędziami (np. do wykonywania komend, patchowania kodu, itp.),
- lepsze wyniki w zadaniach programistycznych w porównaniu z wcześniejszym GPT-5, przy niższym koszcie i czasie odpowiedzi w prostych przypadkach.
Co nowego wnosi GPT-5.1 z perspektywy programisty PHP i Laravel 12?
Lepsze rozumienie złożonych zadań technicznych
GPT-5.1 ma znacząco poprawione wyniki w zadaniach wymagających wielostopniowego rozumowania, takich jak: złożone bugi, analiza kilku plików naraz, wnioskowanie na podstawie logów i stack trace.
Przykładowo, jeśli:
- wklejasz kilka powiązanych klas z warstwą serwisową i kontrolerami,
- plus fragmenty logów z kolejki / jobów / eventów,
model jest lepiej przygotowany, by:
- rozpoznać zależności między klasami,
- wyciągnąć przyczynę błędu,
- zaproponować realistyczną strategię naprawy (a nie tylko kosmetyczne zmiany).
Inteligentniejsze zarządzanie „czasem myślenia”
Dzięki adaptacyjnemu rozumowaniu GPT-5.1 nie marnuje zasobów na proste rzeczy. Kiedy prosisz o:
- banalny snippet (np. prostą walidację requestu),
- migrację z kilkoma polami,
model odpowie szybko i konkretnie. Ale gdy zadanie jest złożone:
- refaktoryzacja starego modułu billingowego,
- przeprojektowanie architektury event-driven w systemie,
- analiza race condition w jobach,
GPT-5.1 Thinking naturalnie „włącza dłuższe myślenie”, co w praktyce daje lepsze, bardziej spójne odpowiedzi.
Bardziej „ludzki” i sterowalny styl odpowiedzi
Dużo zmian poszło w stronę stylu komunikacji:
- GPT-5.1 jest „cieplejszy” w tonie i lepiej wyjaśnia skomplikowane tematy,
- masz dostęp do presetów osobowości (Professional, Friendly, Efficient, Nerdy, Candid, Cynical itd.),
- możesz łatwiej dostosować styl wypowiedzi pod swój projekt lub zespół.
Dla programisty oznacza to np.:
- w trybie Professional/Efficient – suche, rzeczowe odpowiedzi, idealne do dokumentacji i poważnych PR-ów,
- w trybie Nerdy/Friendly – bardziej „warsztatowy” styl, dobry do tłumaczenia juniorom lub dokumentowania decyzji architektonicznych.
Funkcje przydatne stricte pod kod i koszty
GPT-5.1 wprowadza także:
- „no reasoning” mode – możesz wyłączyć dodatkowe rozumowanie, jeśli chodzi tylko o szybkie generowanie kodu (np. prostych helperów) przy użyciu API,
- nowe narzędzia dla kodu (np. do patchowania i wykonywania komend),
- lepszą wydajność i mniejsze zużycie tokenów w typowych taskach programistycznych – testy early adopters pokazują przyspieszenie 2–3x dla codziennych zadań i duże oszczędności w tokenach przy prostych zapytaniach.
W praktyce: mniejsze rachunki i mniej czekania, więcej czasu na faktyczne myślenie o domenie.
Co to konkretnie oznacza dla programisty PHP i Laravel 12?
GPT-5.1 jako „senior pair-programmer” – ale trzeźwo
Od strony workflow wygląda to tak, że ChatGPT 5.1 dla programistów PHP i Laravel może pełnić rolę:
- szybkiego pomocnika (Instant) – pisze Ci Requesty, Resource’y, drobne migracje, proste testy,
- wirtualnego seniora (Thinking) – z którym konsultujesz:
- architekturę modułu,
- wzorce projektowe pod konkretny problem,
- migrację legacy PHP do Laravel 12,
- wpływ zmian na wydajność i skalowalność.
Różnica względem wcześniejszych modeli polega na tym, że GPT-5.1 lepiej radzi sobie z „długą ścieżką myślową” – mniej gubi wątki przy bardziej złożonych zadaniach.
Laravel 12 + GPT-5.1 = mniej „klepania”, więcej projektowania
W kontekście Laravel 12 GPT-5.1 dobrze wpisuje się w:
- generowanie boilerplate’u (kontrolery, FormRequesty, Resource’y, migracje, Jobs, Events),
- projektowanie i omawianie:
- modułów domenowych,
- strategii cache’owania,
- podziału odpowiedzialności między warstwami,
- pracę z testami (Pest / PHPUnit) – od generowania szkiców testów po propozycje dodatkowych edge case’ów.
Dzięki lepszemu rozumowaniu wieloetapowemu, możesz np. wklejać:
- definicje modeli,
- fragmenty migracji,
- przykładowe use-case’y biznesowe,
a GPT-5.1 pomoże spiąć to w sensowną całość.
Lepsze debugowanie złożonych problemów w PHP / Laravel
Dzięki usprawnieniom w rozumowaniu GPT-5.1 lepiej sprawdza się przy:
- analizie stack trace z kilku warstw (kontroler → serwis → repo → job),
- szukaniu edge case’ów (np. race conditions w kolejce, problemy z blokadami transakcji, nieoczywiste interakcje middleware’ów),
- analizie logów (np. z systemów monitoringu, logów SQL, logów Redis).
To nadal nie jest debugger w stylu Xdebug, ale inteligentny asystent, który jest w stanie:
- zasugerować, gdzie w kodzie brakuje walidacji albo obsługi błędów,
- zaproponować dodatkowe logowanie / metryki,
- podpowiedzieć, jak napisać test, który odtwarza błąd.
Personalizacja stylu pracy – GPT-5.1, który „myśli” jak Twój zespół
Presety osobowości dopasowane do ról w zespole
Dzięki presetom osobowości w GPT-5.1 możesz dobrać styl pracy modelu do sytuacji:
- Professional + Efficient – idealne, gdy generujesz:
- fragmenty dokumentacji technicznej,
- opisy PR-ów,
- specyfikacje endpointów dla stakeholderów.
- Friendly + Nerdy – świetne przy:
- onboardingach nowych devów,
- tłumaczeniu trudnych zagadnień (np. CQRS, event sourcing, Hexagonal),
- warsztatach wewnętrznych.
Dla Ciebie jako dev-a Laravel 12 to oznacza, że możesz mieć:
- „poważny” styl wypowiedzi do komunikacji na zewnątrz,
- jednocześnie bardziej luźny, warsztatowy styl do codziennego pair-programmingu.
Steerowalność – większa kontrola nad odpowiedziami
GPT-5.1 daje też zwiększoną sterowalność (steerability):
- łatwiej narzucić format odpowiedzi (np. „zawsze dawaj kod + testy + listę edge case’ów”),
- łatwiej wymusić konkretne konwencje (np. PSR-12, typowanie, styl nazw),
- łatwiej ograniczyć wodolejstwo (parametry dot. zwięzłości odpowiedzi w API).
To szczególnie przydatne, jeśli integrujesz GPT-5.1 z własnymi narzędziami (np. CLI do refaktoryzacji kodu, generator szkieletów modułów w Laravel 12).
Mity na start: czego GPT-5.1 nie zrobi za programistę PHP
„AI napisze cały projekt za mnie” – nie.
GPT-5.1 jest mocniejszy od poprzedników, ale nadal:
- nie zna Twojej domeny biznesowej tak dobrze jak Ty,
- nie ogarnia wszystkich niepisanych reguł w projekcie,
- nie bierze odpowiedzialności za bugi na produkcji.
Może:
- przyspieszyć produkcję boilerplate’u,
- poprawić jakość testów i dokumentacji,
- pomóc w projektowaniu architektury.
Ale to Ty:
- definiujesz wymagania,
- podejmujesz decyzje architektoniczne,
- recenzujesz kod i bierzesz odpowiedzialność za całość.
„GPT-5.1 zawsze ma rację” – też nie.
Mimo lepszego rozumowania i wyników na benchmarkach, GPT-5.1 potrafi:
- halucynować (wymyślać rzeczy),
- proponować rozwiązania niezgodne z realiami Twojego projektu,
- upraszczać problemy, które wymagają twardych danych (np. realnych limitów infrastruktury).
Dlatego w tym przewodniku będziemy traktować GPT-5.1 jak mocnego partnera do wspólnego myślenia, a nie „autora kodu, którego nie wolno kwestionować”.
Jak przygotować ChatGPT 5.1 do pracy z PHP i Laravel 12
Żeby ChatGPT 5.1 dla programistów PHP i Laravel był naprawdę przydatny, musi „myśleć jak Twój projekt”. Samo odpalanie nowej rozmowy i rzucanie „napisz mi kontroler” to marnowanie potencjału. Kluczowe są trzy rzeczy:
- dobrze ustawione instrukcje globalne (Custom Instructions / ustawienia asystenta),
- sensowny „system prompt” na start sesji programistycznej,
- spójność – trzymanie się jednego stylu kodu, wersji PHP i Laravel 12 w całym wątku.
Poniżej przeprowadzę Cię krok po kroku przez to, jak to ustawić.
Ustawienia ChatGPT pod programistę PHP / Laravel 12
Dlaczego instrukcje globalne są krytyczne?
ChatGPT 5.1 ma mocno rozbudowaną personalizację – może zapamiętać, kim jesteś i jakiej pomocy oczekujesz. Jeśli od razu powiesz mu, że:
- pracujesz w PHP 8.2 / 8.3 i Laravel 12,
- trzymasz się PSR-12, typowania i konkretnych standardów,
- używasz np. Pest do testów,
- wolisz kod prosty niż „sprytny”,
to model od początku będzie odpowiadał bliżej Twoich realnych potrzeb – zamiast generować losowy styl z głowy.
Co warto wpisać w instrukcjach o Tobie (jako dev PHP / Laravel)
W polu typu „O mnie / Kim jestem / Jakiej pomocy oczekuję” warto zwięźle opisać swój kontekst. Przykładowa treść do adaptacji:
- jesteś programistą PHP (mid/senior),
- pracujesz głównie z Laravel 12,
- target: aplikacje biznesowe / SaaS / CRM / e-commerce (wybierz co pasuje),
- stack: MySQL/PostgreSQL, Redis, kolejki, czasem mikroserwisy.
Przykład (do przerobienia pod siebie):
„Pracuję jako programista PHP (mid/senior), głównie w Laravel 12. Tworzę aplikacje biznesowe (SaaS / CRM), korzystam z MySQL i Redis, kolejek, eventów, modular monolith / czasem mikroserwisy. Odpowiadaj jak do doświadczonego dev-a – możesz pominąć absolutne podstawy PHP, ale zwracaj uwagę na architekturę, czytelność i testowalność.”
To sprawia, że ChatGPT 5.1 nie będzie Ci tłumaczył, co to foreach, tylko skupi się na rzeczach, które mają sens na Twoim poziomie.
Co wpisać w instrukcjach o tym, jak ma odpowiadać
Drugi ważny obszar to styl odpowiedzi. Tu ustalasz:
- standardy kodu,
- formatowanie,
- poziom szczegółowości.
Przykład:
„Zawsze zakładaj PHP 8.2+ i Laravel 12. Stosuj PSR-12, pełne typowanie i sensowne nazwy klas/metod. W odpowiedziach dla kodu:
- pokazuj kompletne klasy (z
namespace,use, itp.),- dodawaj komentarze tylko tam, gdzie to faktycznie pomaga,
- proponuj testy w Pest do kluczowych funkcji.
Jeśli zapytanie dotyczy architektury – najpierw zaproponuj plan (kroki, warstwy, zależności), a dopiero potem kod. Unikaj zbędnego „wodolejstwa”.”
To jest fundament, który będziemy potem rozszerzać w pierwszym „system promptcie” w danej sesji.
Wybór stylu / „osobowości” modelu pod pracę dev-a
Kiedy włączyć tryb bardziej „Professional/Efficient”
Do codziennej pracy nad projektem komercyjnym najlepiej sprawdza się konfiguracja zbliżona do:
- Professional – ton spokojny, techniczny,
- Efficient – odpowiedzi konkretne, bez zbędnych dygresji.
Taki styl jest idealny, gdy:
- generujesz kod, który trafi do PR-ów,
- tworzysz dokumentację techniczną,
- pracujesz z wymaganiami biznesowymi i chcesz mieć czyste, rzeczowe podsumowania.
Kiedy pozwolić sobie na „Friendly/Nerdy”
Styl Friendly / Nerdy jest świetny, gdy:
- chcesz, żeby ChatGPT 5.1 pełnił rolę mentora / pair-programmera,
- tłumaczysz sobie jakieś nowe koncepty (np. CQRS, event sourcing, architektura heksagonalna w kontekście Laravel 12),
- przygotowujesz materiały szkoleniowe dla zespołu lub juniorów.
Prosta taktyka: do „poważnej” pracy projektowej – Professional + Efficient; do nauki i eksperymentów – Friendly + Nerdy.
Bazowy „system prompt” na początek sesji programistycznej
Nawet przy dobrych instrukcjach globalnych, warto każdą sesję stricte projektową zacząć jednym, porządnym promptem, który ustawi kontekst:
- projekt,
- stack,
- wymagania co do odpowiedzi.
Ogólny szablon system promptu dla Laravel 12
Poniżej propozycja, którą możesz adaptować pod każdy projekt (warto wkleić na początku nowego wątku).
Szablon
„Jesteś seniorem PHP / Laravel, pracującym w realnym projekcie komercyjnym.
Założenia:
- używamy PHP 8.2+ i Laravel 12,
- stosujemy PSR-12, pełne typowanie, klasy serwisowe zamiast „helpersów”,
- testy piszemy w Pest,
- preferujemy prostą, czytelną architekturę nad „sprytne” hacki.
Zasady odpowiadania:
- jeśli pytam o kod, zawsze pokazuj kompletne klasy z
namespaceiuse,- jeśli to możliwe, zaproponuj też przykładowy test w Pest,
- wskazuj potencjalne edge case’y i problemy z bezpieczeństwem,
- jeśli zadanie jest złożone, najpierw zaproponuj plan (kroki), potem kod.
Kontekst projektu:
[TU W 2–5 ZDANIACH OPISZ PROJEKT: typ, główne moduły, domenę, np. system rezerwacji, CRM, sklep, itp.]Czy rozumiesz kontekst? Jeśli tak, streść go własnymi słowami w maks. 5 punktach, a potem możemy przejść do pierwszego zadania.”
Ten jeden, dobrze przemyślany prompt powoduje, że:
- GPT-5.1 „ustawia się” w roli seniora,
- od razu kojarzy Laravel 12 i PHP 8.2+,
- łapie Twój styl pracy (plan → kod → testy → edge case’y).
Przykład wypełnionego promptu dla aplikacji SaaS
Załóżmy, że tworzysz SaaS do zarządzania projektami.
„Jesteś seniorem PHP / Laravel, pracującym w realnym projekcie komercyjnym.
Założenia:
- używamy PHP 8.2+ i Laravel 12,
- stosujemy PSR-12, pełne typowanie, klasy serwisowe zamiast „helpersów”,
- testy piszemy w Pest,
- preferujemy prostą, czytelną architekturę nad „sprytne” hacki.
Zasady odpowiadania:
- jeśli pytam o kod, zawsze pokazuj kompletne klasy z
namespaceiuse,- jeśli to możliwe, zaproponuj też przykładowy test w Pest,
- wskazuj potencjalne edge case’y i problemy z bezpieczeństwem,
- jeśli zadanie jest złożone, najpierw zaproponuj plan (kroki), potem kod.
Kontekst projektu:
Budujemy SaaS do zarządzania projektami (projekty, zadania, komentarze, załączniki, role użytkowników, uprawnienia). System ma API REST dla frontendu SPA oraz kilka integracji zewnętrznych (webhooki, integracja z systemem fakturującym).Czy rozumiesz kontekst? Jeśli tak, streść go własnymi słowami w maks. 5 punktach, a potem możemy przejść do pierwszego zadania.”
Taki start sprawia, że kolejne prompty mogą być krótsze, bo model ma już głowę „ustawioną” na Twój projekt.
Co jeszcze warto ustawić na początku sesji
Ustal format odpowiedzi raz, a dobrze
Żeby uniknąć ciągłego powtarzania „pokaż kod + testy + edge case’y”, możesz ustalić format z góry:
„Domyślny format odpowiedzi, gdy proszę o kod:
- Krótkie wyjaśnienie (maks. 3–4 zdania),
- Kod (kompletne klasy / pliki),
- Propozycja 2–5 testów w Pest (kod),
- Lista potencjalnych edge case’ów / ryzyk.”
Dzięki temu ChatGPT 5.1 będzie zdecydowanie bardziej użyteczny jako partner do developmentu, a nie tylko generator pojedynczych snippetów.
Daj znać, czego nie chcesz
Równie ważne jest powiedzieć, czego model ma unikać. Przykładowo:
„Nie używaj w przykładach zewnętrznych pakietów, chyba że explicite o to poproszę. Nie używaj
dd()anivar_dump()w kodzie produkcyjnym. Unikaj skrótów typuArr::getjeśli możemy użyć natywnych mechanizmów Laravel 12.”
Takie „zakazy” bardzo poprawiają jakość generowanego kodu.
Podstawy skutecznego promptowania w ChatGPT 5.1 dla programistów PHP i Laravel 12
Żeby ChatGPT 5.1 dla programistów PHP i Laravel był czymś więcej niż „generator SQL-i i walidatorów”, musisz opanować jedną rzecz: sztukę zadawania pytań, czyli porządne promptowanie. Dobra wiadomość: to nie jest magia. Zła: „Napisz mi endpoint” to nie jest dobry prompt. 😄
Poniżej przejdziemy przez praktyczny zestaw zasad i schematów, które możesz od razu zastosować w swojej codziennej pracy z Laravel 12.
Schemat dobrego promptu: Kontekst → Zadanie → Ograniczenia → Format
Dlaczego sama prośba o „kod” to za mało?
Model GPT-5.1 jest mocny, ale nie siedzi w Twoim repo. Nie zna:
- wersji PHP / Laravel,
- konwencji w projekcie,
- wymagań biznesowych,
- Twoich standardów jakości.
Jeśli podasz mu tylko: „napisz kontroler logowania”, to zrobi coś „w miarę OK”, ale:
- może użyć starego stylem (
Auth::attempt, brak FormRequest), - pominie testy,
- nie dopasuje się do Twojej architektury.
Dlatego potrzebujemy struktury.
Kontekst → Zadanie → Ograniczenia → Format
To jest Twój nowy, domyślny szablon promptu.
1. Kontekst
Kilka zdań o:
- gdzie będzie użyty kod (API, panel admina, mikroserwis),
- jak wygląda Twój stack (Laravel 12, Pest, architektura),
- jakie są powiązania domenowe (np. „zadania należą do projektów, projekty do organizacji”).
Przykład:
„Buduję API w Laravel 12 dla aplikacji typu SaaS do zarządzania projektami. Mamy modele:
Organization,Project,Task. Każdy projekt należy do organizacji, a zadania do projektu. API jest używane przez frontend SPA (Vue).”
2. Zadanie
Jedno, konkretne polecenie. Nie „zrób mi wszystko”, tylko:
- „kontroler do…”,
- „walidator do…”,
- „testy do…”.
Przykład:
„Potrzebuję endpointu
POST /api/projects, który tworzy nowy projekt w ramach danej organizacji.”
3. Ograniczenia
Tu narzucasz:
- wersje (PHP 8.2, Laravel 12),
- style (PSR-12, pełne typowanie),
- techniczne wymagania (np. użyj FormRequest, Resource, Sanctum, itp.).
Przykład:
„Użyj Laravel 12, PSR-12, pełnego typowania. Walidację zrób w osobnej klasie
StoreProjectRequest. Zwróć dane przezProjectResource. Użytkownik jest uwierzytelniony przez Sanctum.”
4. Format
Jak ma wyglądać odpowiedź:
- tylko kod / kod + opis,
- ile klas, w jakiej kolejności,
- czy mają być testy.
Przykład:
„Pokaż:
- trasę w
routes/api.php,- klasę
StoreProjectRequest,- klasę
ProjectControllerz metodąstore,- klasę
ProjectResource,- przykładowy test w Pest dla tego endpointu.
Odpowiedź podziel nagłówkami i dodaj krótkie komentarze w kodzie.”
I to jest pełny, dobry prompt.
Zły prompt vs dobry prompt – przykład na endpoint logowania w Laravel 12
Zły prompt (typowy, niestety)
„Napisz mi endpoint do logowania w Laravel.”
Co może pójść nie tak?
- Laravel może nie być w najnowszej wersji,
- brak informacji o mechanizmie auth (Sanctum? Passport? session?),
- brak info o tym, czy chcesz FormRequest, Resource, testy, cokolwiek.
Model musi zgadywać. A jak zgaduje, to czasem trafi, a czasem… nie.
Dobry prompt – szczegółowy przykład
„Pracuję w Laravel 12, PHP 8.2. Uwierzytelnianie realizujemy przez Laravel Sanctum, aplikacja to SPA korzystające z API.
Potrzebuję endpointu logowania
POST /api/login, który:
- przyjmuje
password,- waliduje dane w osobnej klasie
LoginRequest(FormRequest),- sprawdza dane użytkownika i zwraca:
- przy sukcesie: token API Sanctum oraz podstawowe dane użytkownika,
- przy błędzie: odpowiedni komunikat z kodem 422 lub 401.
Wymagania techniczne:
- Laravel 12, PSR-12, pełne typowanie,
- błędy walidacji obsługujemy standardowym mechanizmem FormRequest,
- nie używaj żadnych zewnętrznych paczek poza Sanctum.
Format odpowiedzi:
- Trasa w
routes/api.php,- klasa
LoginRequest,- kontroler
Auth\\LoginControllerz metodą__invoke,- przykładowy test w Pest dla poprawnego logowania i błędnych danych.
Dodaj krótkie komentarze tylko przy kluczowych fragmentach kodu.”
Taki prompt:
- nie zostawia miejsca na zgadywanie,
- jasno określa stack i wymagania,
- wymusza testy,
- daje Ci od razu komplet: route + Request + Controller + testy.
Iteracyjne promptowanie – pracuj „w pętlach”, nie „w strzale”
Dlaczego „od razu kod” to słaby pomysł przy większych rzeczach
Przy prostym FormRequest – spoko, strzelasz promptem i bierzesz wynik.
Przy poważniejszych rzeczach:
- moduł płatności,
- system powiadomień,
- import zewnętrzny,
lepiej nie zaczynać od kodu, tylko od… myślenia. I tutaj GPT-5.1 (szczególnie w trybie Thinking) świeci najjaśniej.
Pętla: Plan → Kod → Testy → Refaktoryzacja
Proponowany workflow:
- Plan „Zaproponuj plan implementacji modułu X w Laravel 12, w maks. 10 krokach. Uwzględnij warstwy, klasy, relacje, potencjalne pułapki.”
- Kod dla jednego kroku „Zaimplementuj krok 1 planu: migracje i modele. Użyj Laravel 12, pełne typowanie. Pokaż tylko migracje i modele.”
- Testy „Na bazie tych modeli zaproponuj testy w Pest, które pokryją główne scenariusze.”
- Refaktoryzacja / krytyka „Oceń powyższy kod według kryteriów: czytelność, testowalność, wydajność, bezpieczeństwo. Zaproponuj konkretne usprawnienia.”
- Kolejne kroki planu – iterujesz.
Dzięki temu:
- w pełni wykorzystujesz adaptacyjne rozumowanie GPT-5.1 – najpierw plan, potem głębsze wejście w kod,
- łatwiej wyłapujesz błędy i antywzorce po drodze,
- masz dokumentację procesu „za darmo” w historii rozmowy.
Przykładowy kompletny prompt – endpoint tworzenia projektu w Laravel 12
Poniżej masz przykład „kanonicznego” promptu, który łączy wszystkie powyższe zasady. Możesz go potraktować jako template do własnych zadań.
Prompt
„Pracuję nad API w Laravel 12 dla aplikacji SaaS do zarządzania projektami.
Kontekst domeny:
Organizationma wieleProject,Projectma wieleTask,- użytkownik może mieć dostęp do wielu organizacji.
Zadanie:
Potrzebuję endpointuPOST /api/organizations/{organization}/projects, który tworzy nowy projekt w ramach danej organizacji, przypisanego do aktualnie zalogowanego użytkownika (Laravel Sanctum).Wymagania techniczne:
- Laravel 12, PHP 8.2+, PSR-12, pełne typowanie,
- walidacja w osobnej klasie
StoreProjectRequest(FormRequest),- odpowiedź JSON z użyciem
ProjectResource,- przy błędach walidacji – standardowy format FormRequest,
- jeśli użytkownik nie ma dostępu do organizacji, zwróć 403.
Format odpowiedzi:
- Definicja trasy w
routes/api.php,- klasa
StoreProjectRequest,- klasa
ProjectResource,- kontroler
ProjectControllerz metodąstore,- przykładowy test w Pest dla:
- poprawnego utworzenia projektu,
- próby utworzenia projektu w organizacji bez uprawnień (403).
Dodaj krótkie komentarze w kodzie tylko przy kluczowych fragmentach (autoryzacja, walidacja, logika domenowa).”
Jak widzisz:
- Kontekst – domena, relacje.
- Zadanie – ściśle określony endpoint.
- Ograniczenia – Laravel 12, Sanctum, FormRequest, Resource, PSR-12.
- Format – jasno wskazane, jakie pliki mają się pojawić i że mają być testy.
To jest dokładnie ten poziom szczegółowości, przy którym ChatGPT 5.1 zaczyna naprawdę błyszczeć w pracy z Laravel 12.
Checklista dobrego promptu dla dev-a Laravel 12
Na koniec tej sekcji – krótka ściąga, którą możesz mieć w notatkach:
- Czy podałem kontekst (projekt, domena, używane technologie)?
- Czy jasno opisałem zadanie (jedno, konkretne)?
- Czy określiłem ograniczenia techniczne (Laravel 12, PHP wersja, style, pakiety)?
- Czy wskazałem format odpowiedzi (pliki, kolejność, testy)?
- Czy zadanie nie jest zbyt szerokie (np. „zrób mi cały moduł płatności”) – jeśli tak, rozbijam na plan + kroki.
- Czy wspomniałem o testach (Pest) i potencjalnych edge case’ach?
Jeśli większość z tych pól jest odhaczona – masz dobry prompt.
Gotowe prompty do codziennych zadań w PHP i Laravel 12
Pora na mięso: konkretne, gotowe prompty, które możesz kopiować do ChatGPT 5.1 i od razu używać w pracy z PHP 8.2+ i Laravel 12 (Laravel 12 wymaga min. PHP 8.2, więc i tak jesteś na współczesnym stacku).
W tej części:
- pokazuję gotowy prompt,
- tłumaczę, po co jest tak skonstruowany,
- dorzucam przykładowe efekty, których możesz oczekiwać (fragmenty kodu z komentarzami).
Traktuj to jak ściągę „copy–paste + modyfikuj pod projekt”.
Prompty do generowania kodu w Laravel 12
Kontroler + FormRequest + Resource (tworzenie zasobu)
Prompt: tworzenie projektu w ramach organizacji
Pracuję nad API w Laravel 12 (PHP 8.2+, PSR-12). Buduję SaaS do zarządzania projektami.
Kontekst domeny:
- Organization ma wiele Project,
- Project ma wiele Task,
- użytkownik może mieć dostęp do wielu Organization.
Zadanie:
Potrzebuję endpointu `POST /api/organizations/{organization}/projects`, który tworzy projekt w ramach wskazanej organizacji.
Założenia:
- użytkownik jest uwierzytelniony przez Laravel Sanctum,
- użytkownik musi mieć dostęp do organizacji, inaczej zwracamy 403.
Wymagania techniczne:
- Laravel 12, pełne typowanie, PSR-12,
- walidacja w osobnej klasie `StoreProjectRequest` (FormRequest),
- odpowiedź JSON przez `ProjectResource`,
- obsłuż podstawowe pola: `name` (string, wymagane, max 255), `description` (nullable string), `due_date` (nullable date).
Format odpowiedzi:
1. Trasa w `routes/api.php`,
2. klasa `StoreProjectRequest`,
3. klasa `ProjectResource`,
4. kontroler `App\Http\Controllers\Api\ProjectController` z metodą `store`,
5. przykładowy test w Pest (feature) dla:
- poprawnego utworzenia projektu,
- próby utworzenia projektu w organizacji, do której użytkownik nie ma dostępu (403).
Dodaj komentarze w kodzie tylko przy kluczowych fragmentach (autoryzacja, walidacja, logika domenowa).
Czego możesz oczekiwać od ChatGPT 5.1 (przykładowy kod)
Trasa w routes/api.php:
<?php
use App\Http\Controllers\Api\ProjectController;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')
->prefix('organizations/{organization}')
->group(function (): void {
Route::post('projects', [ProjectController::class, 'store'])
->name('organizations.projects.store');
});
FormRequest StoreProjectRequest:
<?php
declare(strict_types=1);
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreProjectRequest extends FormRequest
{
public function authorize(): bool
{
// Zakładamy, że sama autoryzacja dostępu do Organization
// będzie obsłużona w kontrolerze lub polityce.
// Tu przyjmujemy, że uwierzytelniony użytkownik może próbować wykonać żądanie.
return $this->user() !== null;
}
/**
* Zasady walidacji danych wejściowych.
*/
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'description' => ['nullable', 'string'],
'due_date' => ['nullable', 'date'],
];
}
}
Resource ProjectResource:
<?php
declare(strict_types=1);
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* @property int $id
* @property string $name
* @property string|null $description
* @property string|null $due_date
* @property int $organization_id
*/
class ProjectResource extends JsonResource
{
/**
* Transformacja modelu Project do tablicy JSON.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'organizationId' => $this->organization_id,
'name' => $this->name,
'description' => $this->description,
'dueDate' => $this->due_date,
'createdAt' => $this->created_at?->toIso8601String(),
'updatedAt' => $this->updated_at?->toIso8601String(),
];
}
}
Kontroler ProjectController:
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreProjectRequest;
use App\Http\Resources\ProjectResource;
use App\Models\Organization;
use App\Models\Project;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ProjectController extends Controller
{
public function store(StoreProjectRequest $request, Organization $organization): JsonResponse
{
/** @var \App\Models\User $user */
$user = $request->user();
// Kluczowy fragment: sprawdzenie, czy użytkownik ma dostęp do organizacji.
if (! $user->organizations()->whereKey($organization->getKey())->exists()) {
abort(403, 'You do not have access to this organization.');
}
$data = $request->validated();
/** @var Project $project */
$project = $organization->projects()->create([
'name' => $data['name'],
'description' => $data['description'] ?? null,
'due_date' => $data['due_date'] ?? null,
'owner_id' => $user->getKey(),
]);
return (new ProjectResource($project))
->response()
->setStatusCode(201);
}
}
Test feature w Pest (np. tests/Feature/CreateProjectTest.php):
<?php
declare(strict_types=1);
use App\Models\Organization;
use App\Models\Project;
use App\Models\User;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\postJson;
it('creates a project for organization the user has access to', function (): void {
/** @var User $user */
$user = User::factory()->create();
/** @var Organization $organization */
$organization = Organization::factory()->create();
// Zakładamy relację wiele-do-wielu user <-> organization.
$user->organizations()->attach($organization);
actingAs($user, 'sanctum');
$response = postJson(route('organizations.projects.store', [
'organization' => $organization->getKey(),
]), [
'name' => 'New Project',
'description' => 'Test project',
'due_date' => '2025-12-31',
]);
$response->assertCreated()
->assertJsonFragment([
'name' => 'New Project',
]);
expect(Project::query()->count())->toBe(1);
});
it('returns 403 when user has no access to organization', function (): void {
/** @var User $user */
$user = User::factory()->create();
/** @var Organization $organization */
$organization = Organization::factory()->create();
actingAs($user, 'sanctum');
$response = postJson(route('organizations.projects.store', [
'organization' => $organization->getKey(),
]), [
'name' => 'Forbidden Project',
]);
$response->assertForbidden();
expect(Project::query()->count())->toBe(0);
});
Tego typu odpowiedzi możesz oczekiwać od ChatGPT 5.1 Thinking, jeśli dasz dobry prompt. Instant najczęściej też da radę, ale Thinking lepiej ogarnia złożoną logikę.
Migracja + Model Eloquent z relacjami
Prompt: migracja i model Invoice
Pracuję w Laravel 12 (PHP 8.2+). Potrzebuję modelu faktury.
Kontekst:
- Model
Invoicereprezentuje fakturę wystawioną klientowi,- każda faktura należy do
User(owner) i opcjonalnie doProject,- będziemy często filtrować po
statusiissue_date.Zadanie:
Przygotuj:
- migrację
create_invoices_table,- model
App\Models\Invoicez relacjami doUseriProject.Wymagania:
- Laravel 12, pełne typowanie, PSR-12,
- pola:
id,user_id,project_id(nullable),number(string, unikalny),status(string),gross_amount(decimal 10,2),issue_date(date),due_date(date), timestamps,- dodaj indeksy pod częste zapytania (
status,issue_date),- w modelu dodaj relacje
user()iproject()oraz proste scope’y:scopePaid()iscopeOverdue().Dodaj komentarze w kodzie przy indeksach i scope’ach.
Resztę (migrację + model) ChatGPT 5.1 wygeneruje w stylu podobnym do:
$table->index(['status', 'issue_date']);
oraz:
public function scopePaid(Builder $query): Builder
{
return $query->where('status', 'paid');
}
itd.
Jobs, Events, Listeners, Queue – asynchroniczne zadania
Prompt: wysyłanie powiadomień po utworzeniu zamówienia
Laravel 12, PHP 8.2+, aplikacja e-commerce.
Kontekst:
- Mamy model
Order,- po utworzeniu zamówienia chcemy:
- wysłać e-mail do klienta,
- wysłać e-mail do działu obsługi.
Zadanie:
Zaproponuj asynchroniczną architekturę w Laravel 12:
- event
OrderPlaced,- listener
SendOrderNotifications,- job
SendOrderEmailwyzwalany z listenera.Wymagania:
- event + listener zarejestrowane w
EventServiceProvider,- job implementujący
ShouldQueue,- pokaż przykład użycia eventu w kodzie tworzącym zamówienie (np. w serwisie).
Format:
- event
OrderPlaced,- listener
SendOrderNotifications,- job
SendOrderEmail,- fragment
OrderService, który:
- tworzy zamówienie,
- wywołuje event.
Dodaj komentarze przy miejscach, gdzie decydujemy się na async vs sync.
To jest idealne zadanie dla GPT-5.1 Thinking: dużo elementów, zależności i dobry kandydat na adaptacyjne rozumowanie.
Prompty do debugowania błędów PHP / Laravel
Analiza stack trace + kodu
Prompt: klasyczny bug w serwisie
Pracuję w Laravel 12 (PHP 8.2+). Poniżej masz stack trace oraz fragmenty kodu.
[Wklej tutaj stack trace z logów lub konsoli]
[Wklej tutaj powiązane klasy: kontroler, serwis, ewentualnie model]
Zadanie:
- Wyjaśnij, co jest prawdopodobną przyczyną błędu, krok po kroku,
- wskaż dokładnie miejsce w kodzie, które jest problematyczne,
- zaproponuj poprawkę,
- zaproponuj test (w Pest), który odtwarza ten błąd.
Wymagania:
- Laravel 12, bez zmiany technologii,
- traktuj mój kod realistycznie (nie przepisuj wszystkiego na nowo, tylko napraw to, co trzeba),
- zwróć szczególną uwagę na:
nullvs brak relacji,- masowe przypisywanie,
- transakcje,
- potencjalne race conditions.
Odpowiedź sformatuj w sekcjach:
- Analiza,
- Miejsce błędu,
- Poprawka (kod),
- Propozycja testu w Pest.
To jest złoto przy dziwnych błędach produkcyjnych. Im więcej wkleisz realnego kontekstu, tym lepiej GPT-5.1 sobie poradzi.
Szukanie edge case’ów
Prompt: polowanie na rogi systemu
Poniżej masz metodę serwisową w Laravel 12:
[Wklej metodę lub klasę]
Zadanie:
- Wypisz potencjalne edge case’y, które mogą wywołać błędy lub niepożądane zachowanie,
- zaproponuj, jak zabezpieczyć się przed każdym z nich,
- zaproponuj zestaw testów w Pest (tylko nazwy + opis, bez pełnego kodu, jeśli będzie ich dużo).
Skup się szczególnie na:
- współbieżności (kilka requestów naraz),
- braku danych wejściowych,
- błędach komunikacji z zewnętrznymi usługami,
- nieoczywistych założeniach domenowych.
To jest świetny prompt, gdy chcesz, żeby ChatGPT 5.1 zadziałał jako „audytor” Twojej logiki.
Prompty do testów w Laravel 12 (Pest)
Generowanie testów do istniejącego kodu
Prompt: testy do kontrolera API
Pracuję w Laravel 12. Testy piszemy w Pest.
Poniżej masz kontroler API:
[Wklej kontroler]
Zadanie:
- Zaproponuj zestaw sensownych scenariuszy testowych,
- napisz testy w Pest dla tych scenariuszy (używaj helperów typu
postJson,getJsonitd.).Wymagania:
- nie używaj komentarzy przy oczywistych asercjach,
- jeśli trzeba, załóż istnienie fabryk (
UserFactory,ProjectFactoryitd.),- pamiętaj o:
- scenariuszach sukcesu,
- błędach walidacji,
- braku uprawnień (401/403),
- nietypowych danych (np. skrajne wartości).
Pisanie testów pod edge case’y
Prompt: coverage „z górką”
Poniżej masz klasę serwisową w Laravel 12:
[Wklej klasę]
Zadanie:
- Oceń, czy obecny kod (bez testów) jest podatny na edge case’y,
- zaproponuj dodatkowe testy w Pest, które pokryją:
- scenariusze skrajne,
- scenariusze błędów,
- scenariusze z błędami zewnętrznych usług.
Dla każdego testu:
- podaj nazwę (
it('...')),- pokaż pełen kod testu,
- krótko wyjaśnij, po co ten test istnieje.
Prompty do refaktoryzacji legacy PHP → Laravel 12
Refaktoryzacja funkcji proceduralnej do serwisu
Prompt: legacy function → klasa serwisowa
Mam legacy kod w czystym PHP (bez frameworka), który chcę przenieść do Laravel 12.
Poniżej kod:
[Wklej starą funkcję / plik]
Zadanie:
- Przepisz logikę do klasy serwisowej w Laravel 12 (
App\Services\...),- zaproponuj sensowną sygnaturę metody (typy parametrów, zwrotka),
- zaproponuj prosty interfejs, jeśli ma to sens,
- napisz przykładowe testy w Pest.
Wymagania:
- PHP 8.2+, pełne typowanie,
- prosta, czytelna logika – żadnych „magicznych” helperów,
- nie zmieniaj logiki biznesowej, tylko jej strukturę,
- pokaż również, jak taka klasa mogłaby być wstrzykiwana do kontrolera (constructor injection).
Refaktoryzacja modułu krok po kroku
Prompt: migracja w kilku iteracjach
Mam moduł legacy (PHP), który chcę stopniowo przenosić do Laravel 12.
Poniżej opis modułu i przykładowe pliki:
[Opis + pliki]
Zadanie:
- Najpierw zaproponuj plan migracji w maks. 7 krokach (bez kodu),
- dopiero po mojej akceptacji planu – realizuj krok 1 (kod),
- po zakończeniu kroku 1 – zaproponuj testy, które potwierdzą, że nie zepsuliśmy logiki.
Kryteria:
- minimalizujemy ryzyko regresji,
- nie przepisujemy wszystkiego na raz,
- w każdej iteracji powinniśmy móc wdrożyć kod bez wybuchu produkcji.
Ten styl pracy świetnie wykorzystuje adaptacyjne rozumowanie GPT-5.1 – najpierw plan, potem kawałek po kawałku.
Prompty do dokumentacji, PHPDoc i komunikacji technicznej
Generowanie PHPDoc dla istniejącego kodu
Poniżej masz klasę w Laravel 12 (bez PHPDoc):
[Wklej klasę]
Zadanie:
- Dodaj sensowny PHPDoc do klasy, do publicznych metod i do właściwości,
- nie opisuj oczywistości (np. „Metoda zwraca true, jeśli zwraca true”),
- skup się na:
- parametrach,
- typach zwracanych wartości,
- ważnych założeniach domenowych.
Zachowaj PSR-12 i nie zmieniaj logiki klasy.
Tworzenie krótkiego ADR (Architecture Decision Record)
Oto opis decyzji architektonicznej w punktach:
[Wklej swoje notatki / myśli]
Zadanie:
- Zamień to na zwięzły ADR (Architecture Decision Record) w formacie:
- Context,
- Decision,
- Consequences (positive/negative),
- styl: zwięzły, techniczny, do repo w Laravel 12.
Nie wymyślaj dodatkowych argumentów – używaj tylko tego, co podałem, ewentualnie delikatnie doprecyzuj logiczne konsekwencje.
Scenariusze end-to-end: ChatGPT 5.1 jako partner w całym cyklu pracy (Laravel 12)
Do tej pory mieliśmy sporo „mikro-promptów”. Teraz czas spojrzeć szerzej: jak ChatGPT 5.1 dla programistów PHP i Laravel może pracować z Tobą od momentu pomysłu do gotowego feature’a na produkcji.
Poniżej masz trzy typowe scenariusze:
- start nowego projektu w Laravel 12,
- praca z legacy monolitem,
- wdrażanie nowej funkcjonalności krok po kroku.
W każdym przechodzimy logicznie: wymagania → plan → kod → testy → refaktoryzacja / dokumentacja, a ChatGPT 5.1 jest Twoim „senior-partnerem”.
Scenariusz 1: Start nowego projektu w Laravel 12 z pomocą ChatGPT 5.1
Przekucie wymagań biznesowych na model domeny
Zaczynasz od kawałka opisu biznesowego z Jiry / od klienta. Zamiast od razu tworzyć modele, wrzucasz to do ChatGPT 5.1 z konkretnym zadaniem.
Przykładowy prompt – analiza wymagań
Buduję nową aplikację SaaS w Laravel 12 (PHP 8.2+).
Opis biznesowy (od klienta):
- Klient chce system do zarządzania subskrypcjami kursów online.
- Użytkownik może mieć wiele subskrypcji.
- Subskrypcja dotyczy konkretnych kursów, może być miesięczna lub roczna.
- System ma obsługiwać płatności cykliczne, statusy (active, past_due, canceled).
- Potrzebny jest panel administratora do zarządzania kursami i użytkownikami.
Zadanie:
- Wyciągnij z tego opis uproszczony model domeny (w punktach),
- zaproponuj główne agregaty / modele w Laravel 12,
- opisz w maks. 10 punktach, jakie moduły aplikacji widzisz (np. Billing, Courses, Users, Subscriptions).
Efekt: dostajesz listę modeli i modułów, które możesz od razu wykorzystać jako podstawę architektury.
Projekt architektury na podstawie modelu domeny
Masz już wstępny model. Teraz prosisz ChatGPT 5.1 o zaproponowanie konkretnej struktury katalogów, warstw i zależności.
Przykładowy prompt – architektura
Na podstawie poniższego modelu domeny:
[Wklej listę modeli/modułów z poprzedniej odpowiedzi]
Laravel 12, modular monolith.
Zadanie:
- Zaproponuj strukturę katalogów dla projektu (podszytego pod Laravel 12), np. moduły typu
App\Domain\Billing,App\Domain\Coursesitd.- Opisz, jakie klasy powinny znaleźć się w każdym module (tylko nazwy i odpowiedzialności).
- Zaproponuj, które elementy powinny być:
- kontrolerami HTTP,
- serwisami aplikacyjnymi,
- encjami / modelami Eloquent,
- eventami domenowymi.
- Uwzględnij, że będziemy używać Pest do testów – zaproponuj strukturę katalogów testów.
Dostajesz plan architektury, który możesz przyciąć pod swoje standardy, zanim wygenerujesz choćby jedną linijkę kodu.
Szkielet projektu – migracje, modele, podstawowe endpointy
Na tym etapie prosisz ChatGPT 5.1 o konkretny kod, ale nadal w rozsądnych porcjach.
Przykładowy prompt – migracje i modele
Laravel 12, PHP 8.2+, PSR-12.
Na podstawie poniższego modelu domeny:
[Wklej finalny model domeny / listę agregatów]
Zadanie:
- Zaproponuj migracje dla tabel:
users,courses,subscriptions,plans.- Zwróć uwagę na:
- relacje między tabelami,
- indeksy pod częste zapytania (np. po statusie subskrypcji),
- przyszłą rozbudowę (np. dodatkowe metadata JSON).
Format odpowiedzi:
- osobne klasy migracji z pełnym kodem,
- krótkie komentarze przy kluczowych decyzjach (indeksy, typy pól).
Przykładowy fragment migracji, której możesz się spodziewać (upraszczając):
<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('subscriptions', function (Blueprint $table): void {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->foreignId('plan_id')->constrained()->cascadeOnDelete();
$table->string('status')->index(); // częste filtrowanie po statusie
$table->date('starts_at')->index();
$table->date('ends_at')->nullable()->index();
$table->string('external_id')->nullable()->unique(); // ID z bramki płatności
$table->json('metadata')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('subscriptions');
}
};
Generowanie pierwszych endpointów i testów
Mając migracje i modele, możesz poprosić o pierwsze endpointy (np. listowanie kursów, tworzenie subskrypcji) oraz od razu testy w Pest.
Przykładowy prompt – endpoint tworzenia subskrypcji
Laravel 12, PHP 8.2+, PSR-12, Pest.
Mamy modele: User, Plan, Subscription (jak wyżej).
Zadanie:
- Zaproponuj endpoint
POST /api/subscriptions, który:
- przyjmuje
plan_id,- tworzy subskrypcję dla zalogowanego użytkownika,
- na razie nie integruje się z bramką płatności (tylko zapis w DB),
- ustawia status
pendingi datęstarts_atna dziś.
- Użyj:
- FormRequest
StoreSubscriptionRequest,SubscriptionResource.Format odpowiedzi:
- route,
- FormRequest,
- Resource,
- kontroler z metodą
store,- test feature w Pest.
Zwróć uwagę na walidację i autoryzację (tylko zalogowani użytkownicy).
W praktyce dostajesz pełen szkielet feature’a, który możesz dopracować, zamiast pisać od zera.
Dokumentacja techniczna jako produkt uboczny
Na końcu możesz poprosić ChatGPT 5.1 o zsyntetyzowanie dokumentacji na podstawie dotychczasowych rozmów:
- opis głównych endpointów,
- prosty diagram przepływu (opisowy),
- ADR z decyzjami architektonicznymi.
Przykładowy prompt – dokumentacja API
Na podstawie naszej pracy nad modułem subskrypcji (powyższe endpointy, modele i migracje):
Zadanie:
- Przygotuj krótką dokumentację API (w Markdown) dla frontend developerów:
- lista endpointów,
- przykładowe requesty i response’y (JSON),
- kody odpowiedzi i typowe błędy.
- Styl: zwięzły, techniczny, nastawiony na realne użycie.
Masz gotowy plik, który wkładasz do repo / Confluence.
Scenariusz 2: Praca z legacy monolitem w PHP / starym Laravel
Drugi klasyk: dostajesz projekt w Laravel 5.x / 6.x albo – gorzej – w czystym PHP. Nikt nie chce go dotykać, więc oczywiście trafia do Ciebie. Tu ChatGPT 5.1 jest idealnym narzędziem do bezpiecznej, iteracyjnej refaktoryzacji.
Audyt legacy modułu
Zaczynasz od jednego modułu – np. fakturowanie. Wrzucasz do ChatGPT:
- kilka reprezentatywnych plików,
- krótki opis, co moduł robi biznesowo,
- info o docelowej wersji: Laravel 12, nowa architektura.
Przykładowy prompt – audyt
Mam legacy moduł fakturowania w czystym PHP (bez frameworka). Docelowo chcę go przenieść do Laravel 12, ale muszę najpierw zrozumieć, co on robi.
Poniżej przykładowe pliki:
[Wklej 1–3 kluczowe pliki – np. InvoiceManager.php, helpers.php]
Zadanie:
- Streść w maks. 10 punktach, co ten moduł robi biznesowo,
- wypisz potencjalne problemy techniczne (brak testów, globalne stany, brak walidacji, itp.),
- zaproponuj 5–7 kroków refaktoryzacji w kierunku Laravel 12, przy minimalnym ryzyku regresji.
Dostajesz plan migrowania modułu, a nie randomowy refactor „na raz”.
Refaktoryzacja pojedynczej funkcji → serwis w Laravel 12
Kiedy plan jest gotowy, bierzesz konkretny fragment legacy i każesz ChatGPT 5.1 przepisać go w sensowną klasę.
Przykład legacy:
// legacy_invoice_helper.php
function generate_invoice_number($userId)
{
$prefix = 'INV-';
$date = date('Ymd');
$random = rand(1000, 9999);
return $prefix . $userId . '-' . $date . '-' . $random;
}
Prompt refaktoryzacyjny
Poniżej masz legacy funkcję w czystym PHP:
[Wklej funkcję]
Zadanie:
- Przepisz to do klasy serwisowej w Laravel 12
App\Services\InvoiceNumberGenerator,- użyj PHP 8.2+, pełne typowanie, PSR-12,
- zamiast
rand()użyj interfejsu do generowania losowych liczb (wstrzykiwanego, żeby dało się to testować),- dodaj przykładowy test w Pest, który sprawdza format numeru faktury.
Nie zmieniaj logiki biznesowej (format numeru), tylko sposób jej implementacji.
Przykładowy efekt – klasa serwisowa
<?php
declare(strict_types=1);
namespace App\Services;
use Carbon\CarbonInterface;
interface RandomNumberGenerator
{
public function generate(int $min, int $max): int;
}
<?php
declare(strict_types=1);
namespace App\Services;
use Carbon\CarbonInterface;
/**
* Generator numerów faktur w nowej architekturze Laravel 12.
*/
class InvoiceNumberGenerator
{
public function __construct(
private readonly RandomNumberGenerator $randomNumberGenerator,
private readonly CarbonInterface $clock,
) {
}
public function generateForUser(int $userId): string
{
$prefix = 'INV-';
$date = $this->clock->format('Ymd');
$random = $this->randomNumberGenerator->generate(1000, 9999);
return sprintf('%s%d-%s-%d', $prefix, $userId, $date, $random);
}
}
Test w Pest (przykład)
<?php
declare(strict_types=1);
use App\Services\InvoiceNumberGenerator;
use App\Services\RandomNumberGenerator;
use Carbon\CarbonImmutable;
it('generates invoice number in expected format', function (): void {
$fakeRandom = new class implements RandomNumberGenerator {
public function generate(int $min, int $max): int
{
return 1234; // deterministyczna wartość do testów
}
};
$clock = CarbonImmutable::create(2025, 11, 19);
$generator = new InvoiceNumberGenerator($fakeRandom, $clock);
$result = $generator->generateForUser(42);
expect($result)->toBe('INV-42-20251119-1234');
});
Takie podejście pozwala krok po kroku wyciągać logikę z legacy w kierunku czystych, testowalnych klas.
Planowana migracja całego modułu – iteracje zamiast jednego „big bang”
Kiedy masz już kilka takich klas, możesz poprosić ChatGPT 5.1 o:
- rewizję planu,
- propozycję podziału migracji na kolejne sprinty,
- listę testów regresyjnych.
Przykładowy prompt – iteracje
Na podstawie planu migracji i kilku już przepisanych fragmentów (klasy serwisowe, testy):
Zadanie:
- Zaproponuj podział migracji modułu fakturowania na 3 iteracje,
- dla każdej iteracji:
- wypisz zakres (co migrujemy),
- ryzyka,
- sugerowane testy regresyjne (manualne + automatyczne),
- uwzględnij, że system jest produkcyjny i nie możemy zrobić Big Bang Re-write.
Dostajesz zdroworozsądkowy plan, który można pokazać PM-owi / klientowi.
Scenariusz 3: Wdrożenie nowej funkcjonalności krok po kroku (Laravel 12)
Trzeci scenariusz: „normalna” codzienna robota – dostajesz ticket typu „dodaj system kuponów rabatowych”. Zamiast lecieć z głowy, robisz to w kontrolowanej współpracy z ChatGPT 5.1.
Ustrukturyzowanie ticketu z Jiry / od PM-a
Dostajesz opis biznesowy, często chaotyczny. Najpierw prosisz ChatGPT o uporządkowanie.
Prompt – analiza ticketu
Laravel 12, PHP 8.2+.
Poniżej masz opis ticketu (nieuporządkowany):
[Wklej opis z Jiry / slacka / maila]
Zadanie:
- Zamień to na zestaw jasno opisanych wymagań funkcjonalnych (lista punktów),
- zaproponuj kryteria akceptacji (Given/When/Then lub w prostych punktach),
- wypisz potencjalne edge case’y, o które powinienem dopytać produktowca.
Masz już klarowny opis, zamiast „ściany tekstu”.
Projekt modelu danych i kontraktów API
Następnie prosisz o szczegółowy plan pod Laravel 12.
Prompt – projekt danych
Na podstawie tych wymagań funkcjonalnych:
[Wklej listę wymagań]
Laravel 12, aplikacja e-commerce.
Zadanie:
- Zaproponuj model danych pod system kuponów rabatowych:
- tabele,
- pola,
- relacje z
OrderiUser.
- Zaproponuj, jak powinno wyglądać API:
- endpoint do sprawdzania ważności kuponu,
- endpoint do przypisywania kuponu do zamówienia.
Nie generuj jeszcze kodu – tylko model danych i opis endpointów (metoda, ścieżka, parametry, odpowiedzi).
Dostajesz plan tabel i endpointów – możesz go jeszcze obgadać z zespołem.
Kodowanie modułu w porcjach – migracje, logika, testy
Kiedy plan jest uzgodniony, prosisz o kolejne kawałki.
Krok 1 – migracje
Na podstawie zaproponowanego modelu danych dla kuponów:
[Wklej model danych, który zaakceptowałeś]
Laravel 12, PHP 8.2+, PSR-12.
Zadanie:
1. Przygotuj migracje dla tabel związanych z kuponami,
2. zwróć uwagę na:
- unikalność kodów,
- indeksy pod wyszukiwanie aktywnych kuponów,
- możliwość przyszłej rozbudowy (np. ograniczenia per user).
Pokaż gotowe klasy migracji z minimalnymi komentarzami przy kluczowych decyzjach.
Krok 2 – logika aplikacyjna (np. serwis CouponValidator)
Laravel 12, PHP 8.2+, PSR-12, Pest.
Mamy już migracje i modele dla kuponów.
Zadanie:
- Zaimplementuj serwis
App\Services\CouponValidator, który:
- przyjmuje kod kuponu i opcjonalnie użytkownika / zamówienie,
- sprawdza:
- czy kupon istnieje,
- czy jest aktywny (daty, status),
- czy nie przekroczono limitu użyć,
- zwraca wynik w postaci obiektu DTO (np.
CouponValidationResult).
- Zaproponuj testy w Pest dla tego serwisu.
Użyj pełnego typowania, prostego, czytelnego API klasy.
Krok 3 – endpointy
Mamy serwis
CouponValidatororaz modele kuponów.Zadanie:
- Zaimplementuj endpoint
POST /api/coupons/validate, który:
- przyjmuje kod kuponu i dane koszyka (np. kwotę),
- używa
CouponValidator,- zwraca:
- czy kupon jest ważny,
- ile klient zaoszczędzi,
- ewentualne komunikaty błędów.
- Użyj:
- FormRequest,
- Resource.
Dodaj test feature w Pest dla scenariuszy: poprawny kupon, nieważny kupon, kupon po terminie.
Refaktoryzacja i „code review” przez model
Na koniec możesz poprosić ChatGPT 5.1 o przegląd gotowego kodu.
Prompt – pseudo code review
Poniżej masz mój kod modułu kuponów w Laravel 12:
[Wklej serwis, kontroler, część testów]
Zadanie:
- Oceń ten kod według kryteriów:
- czytelność,
- testowalność,
- wydajność,
- bezpieczeństwo,
- wypisz listę konkretnych sugestii poprawek (maks. 10),
- dla krytycznych sugestii pokaż fragment kodu „przed” i „po”.
Nie zmieniaj stacku technologicznego, nie wprowadzaj DDD na siłę – skup się na tym, co daje realną wartość.
Wyniki traktujesz jak input do własnego refactoringu – nie bezkrytycznie.
Dokumentacja i komunikacja z biznesem
Na końcu cyklu prosisz o:
- krótkie podsumowanie techniczne,
- opis funkcjonalności „dla ludzi” (PM, marketing, support),
- listę ryzyk i rzeczy do monitorowania po wdrożeniu.
Prompt – podsumowanie dla PM
Na podstawie całej naszej pracy nad modułem kuponów (załączony kod i opisy):
Zadanie:
- Napisz krótkie podsumowanie techniczne dla Product Managera (max. 10 zdań),
- wypisz listę ryzyk technicznych związanych z tym wdrożeniem,
- zaproponuj, co powinniśmy monitorować po wdrożeniu (metryki, logi, alerty).
To zamyka pętlę: od ticketu → przez projekt → implementację → testy → komunikację.
Podsumowanie
W tych trzech scenariuszach widać wspólny schemat pracy z ChatGPT 5.1 w Laravel 12:
- nie zaczynasz od „napisz mi kod”, tylko od wymagań i planu,
- traktujesz model jak partnera do myślenia i projektowania,
- kod generujesz w małych, kontrolowalnych porcjach,
- na koniec wykorzystujesz go do testów, refaktoryzacji i dokumentacji.
Z takim podejściem ChatGPT 5.1 przestaje być „magicznym generatorem snippetów”, a staje się bardzo konkret narzędziem do ogarniania całych feature’ów i modułów w Laravel 12 – od pierwszego ticketu po gotowy kod z testami.
Integracja ChatGPT 5.1 z narzędziami programisty PHP i Laravel 12
Żeby ChatGPT 5.1 dla programistów PHP i Laravel dawał maksimum wartości, nie wystarczy „gadać z nim w przeglądarce”. Największy efekt jest wtedy, gdy wpinasz go w swój realny workflow:
- przeglądarka (ChatGPT) = centrum dowodzenia,
- IDE (VS Code / PhpStorm) = praca na kodzie live,
- własne skrypty / CLI w PHP = automatyzacja powtarzalnych zadań z użyciem API GPT-5.1.
Poniżej ogarniemy każdy z tych poziomów – z naciskiem na Laravel 12 i realne zastosowania.
ChatGPT 5.1 w przeglądarce jako „centralny senior”
Organizacja wątków – mniej chaosu, więcej kontekstu
Jeśli używasz ChatGPT „na pałę”, jeden wątek do wszystkiego, to nic dziwnego, że model czasem zaczyna mieszać. Zrób sobie prostą dyscyplinę:
Jeden projekt = jeden (lub kilka) dedykowanych wątków
Praktyka, która działa:
- prefix w tytułach wątków, np.
L12 – SaaS projekty – architektura,L12 – Billing – bugi produkcyjne,L12 – Legacy CRM – refaktoryzacja.
- W wątku nie skaczesz między projektem A i projektem B – wtedy kontekst (wcześniejsze wiadomości) faktycznie pomaga, zamiast przeszkadzać.
W efekcie GPT-5.1 może korzystać z całej historii rozmowy i lepiej kojarzyć, jakie założenia przyjęliście wcześniej (np. konkretny wzorzec architektury dla danego projektu).
Wklejaj kod porcjami, nie całe repo
Zasada praktyczna:
- mały plik / klasa – ok, wklejasz w całości,
- większy moduł – dzielisz: osobno serwis, osobno kontroler, osobno testy,
- i za każdym razem dodajesz 1–2 zdania kontekstu: „to jest serwis do X”, „to jest test, który odtwarza buga”.
Dzięki temu GPT-5.1 nie dostaje ściany szumu, tylko sensowny, strawny fragment z opisem, po co mu to.
Praca na diffach i PR-ach – ChatGPT jako reviewer
Świetny use-case: code review PR-a z pomocą ChatGPT.
Jak wklejać diff
- Z Git-a wyciągasz diff w formie unified (
git difflub diff z PR-a). - Wklejasz do ChatGPT z promptem w stylu:
Laravel 12, PHP 8.2+.
Poniżej masz diff (PR) w naszym projekcie.
Zadanie:
- Wypisz potencjalne bugi lub regresje,
- zwróć uwagę na bezpieczeństwo (SQL, XSS, auth, uprawnienia),
- zasugeruj uproszczenia kodu, jeśli są oczywiste,
- nie zmieniaj technologii ani architektury – skup się na jakości kodu.
[Wklej diff]
- Traktujesz odpowiedź jak drugi komplet oczu – nie jako wyrocznię.
Możesz także poprosić o propozycję opisu PR-a:
Na podstawie tego diffu wygeneruj opis PR-a:
- krótkie podsumowanie,
- lista zmian technicznych,
- potencjalne ryzyka,
- jak testować.
Integracja ChatGPT 5.1 z IDE (VS Code / PhpStorm)
Nie będę tu reklamował konkretnych wtyczek, bo rynek zmienia się szybciej niż Laravel minor release 😄 – ale większość rozszerzeń robi trzy rzeczy:
- wysyła zaznaczony kod do ChatGPT / API GPT-5.1,
- wyświetla odpowiedź inline / w panelu,
- pozwala z jednego kliknięcia wkleić poprawkę.
Typowe scenariusze użycia w IDE
Szybka refaktoryzacja zaznaczonego fragmentu
Workflow:
- Zaznaczasz metodę / fragment klasy w serwisie.
- Używasz skrótu „wyślij do ChatGPT” z promptem typu: „Przepisz ten fragment w bardziej czytelny sposób, zachowując logikę. Laravel 12, PHP 8.2, PSR-12, pełne typowanie. Zaproponuj tylko gotowy kod, bez komentarza.”
- Porównujesz diff, nie wklejasz bezmyślnie.
Generowanie testów wprost z kodu
- Zaznaczasz serwis / kontroler.
- Prompt: „Na podstawie tego kodu zaproponuj zestaw testów w Pest (Laravel 12). Pokaż gotowe testy, używając fabryk. Skup się na scenariuszach:
- sukces,
- walidacja,
- brak uprawnień,
- edge case’y.”
- Wklejasz testy do odpowiedniego pliku i dopasowujesz do realnych fabryk/fixture’ów.
Dokumentacja z zaznaczonego fragmentu
Przydatne, gdy:
- musisz napisać docs dla integracji zewnętrznej,
- opisujesz serwis domenowy.
Prompt:
„Na podstawie zaznaczonego kodu napisz krótką dokumentację techniczną (Markdown) dla devów:
- co robi ten serwis,
- jakie ma zależności,
- jak go wywołać (przykład w Laravel 12),
- jakie są potencjalne błędy.”
Bezpieczeństwo przy używaniu wtyczek IDE
Kilka zdroworozsądkowych zasad:
- wykluczaj pliki z sekretami z wysyłania (np.
.env, klucze, hasła), - nie wysyłaj pełnych dumpów produkcyjnych danych (anonimizuj),
- nie dawaj wtyczce pełnego dostępu do całego repo, jeśli nie jest to konieczne – wystarczy zaznaczony fragment.
GPT-5.1 jest potężnym narzędziem, ale odpowiedzialność za RODO, NDA i dane klientów zostaje po Twojej stronie.
Własne CLI w PHP z API GPT-5.1 – automatyzacja pod siebie
To jest moment, w którym z programisty-konsumenta ChatGPT stajesz się programistą-budowniczym narzędzi na GPT-5.1.
Zamiast ręcznie kopiować kod do przeglądarki, możesz:
- zbudować prosty skrypt CLI w PHP,
- zintegrować go z artisan albo composer scripts,
- jednym poleceniem wysyłać plik / diff / opis do API GPT-5.1 i dostać odpowiedź w terminalu.
Co daje API GPT-5.1 z perspektywy dev-a PHP?
- model
gpt-5.1jest dostępny w API i przeznaczony m.in. do zadań koderskich, z regulowanym „wysiłkiem rozumowania” (reasoning.effort) oraz parametremtext.verbosity, który kontroluje rozwlekłość odpowiedzi. - możesz korzystać z nowego endpointu
/v1/responses, który jest polecany w nowych projektach i wspiera parametry dla reasoning/verbosity oraz narzędzia koderskie.
Minimalny klient CLI w PHP – przykład
Załóżmy, że chcesz mieć polecenie:
php bin/ai-refactor.php app/Services/UserService.php
które:
- czyta plik,
- wysyła go do GPT-5.1 z prośbą o refaktoryzację,
- wypisuje propozycję nowej wersji w terminalu.
Przygotowanie – klucz API
- Załóż/ustaw projekt w OpenAI i wygeneruj API key.
- Ustaw zmienną środowiskową (np. w
.bashrc/.zshrc):
export OPENAI_API_KEY="sk-..."
- Zrestartuj terminal / załaduj ustawienia.
Skrypt bin/ai-refactor.php
Przykładowy, prosty skrypt (bez zewnętrznych bibliotek):
<?php
declare(strict_types=1);
/**
* Prosty CLI, który wysyła plik PHP do API GPT-5.1
* z prośbą o propozycję refaktoryzacji pod Laravel 12.
*
* Użycie:
* php bin/ai-refactor.php app/Services/UserService.php
*/
const OPENAI_API_URL = 'https://api.openai.com/v1/responses';
$filePath = $argv[1] ?? null;
if ($filePath === null) {
fwrite(STDERR, "Użycie: php bin/ai-refactor.php <ścieżka_do_pliku>\n");
exit(1);
}
if (! is_file($filePath)) {
fwrite(STDERR, "Błąd: plik '{$filePath}' nie istnieje.\n");
exit(1);
}
$apiKey = getenv('OPENAI_API_KEY');
if (! $apiKey) {
fwrite(STDERR, "Błąd: brak zmiennej środowiskowej OPENAI_API_KEY.\n");
exit(1);
}
$code = file_get_contents($filePath);
if ($code === false) {
fwrite(STDERR, "Błąd: nie udało się odczytać pliku.\n");
exit(1);
}
// Budujemy prompt z kontekstem Laravel 12 + oczekiwania wobec odpowiedzi.
$prompt = <<<PROMPT
Pracujesz jako senior PHP / Laravel 12 w dużym projekcie produkcyjnym.
Oto plik PHP (Laravel 12):
--- FILE START ---
{$code}
--- FILE END ---
Zadanie:
1. Zaproponuj ulepszoną wersję tego pliku:
- zachowaj logikę biznesową,
- popraw czytelność, testowalność i zgodność z PSR-12,
- użyj pełnego typowania (PHP 8.2+).
2. Jeśli to ma sens, zaproponuj wydzielenie części logiki do osobnych metod/klas (krótko wyjaśnij).
3. Na końcu wypunktuj potencjalne edge case’y, które warto przetestować.
Format odpowiedzi:
1. Najpierw krótki komentarz (max 5–7 zdań),
2. potem blok z ulepszonym kodem (jeden blok, gotowy do wklejenia),
3. na końcu lista punktowana edge case’ów.
PROMPT;
$payload = [
'model' => 'gpt-5.1',
// Można też podać strukturę rozmowy, ale dla prostoty używamy pojedynczego inputu-tekstu.
'input' => $prompt,
// Ustawiamy niewielki wysiłek rozumowania – szybciej, ale nadal „myśląco”.
'reasoning' => [
'effort' => 'low', // 'none', 'low', 'medium', 'high' – patrz dokumentacja.
],
// Średnia rozwlekłość odpowiedzi – dobre do kodu z komentarzem.
'text' => [
'verbosity' => 'medium', // 'low', 'medium', 'high'
],
];
$ch = curl_init(OPENAI_API_URL);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey,
],
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_THROW_ON_ERROR),
]);
$responseBody = curl_exec($ch);
if ($responseBody === false) {
fwrite(STDERR, "Błąd HTTP: " . curl_error($ch) . "\n");
exit(1);
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode >= 400) {
fwrite(STDERR, "Błąd API (HTTP {$httpCode}): {$responseBody}\n");
exit(1);
}
// Uwaga: struktura odpowiedzi /v1/responses może się zmieniać,
// dlatego na początek wypisujemy surową odpowiedź.
// W docelowym kodzie warto sparsować JSON i wyciągnąć sam tekst.
$data = json_decode($responseBody, true);
if (json_last_error() !== JSON_ERROR_NONE) {
fwrite(STDERR, "Odpowiedź nie jest poprawnym JSON-em:\n{$responseBody}\n");
exit(1);
}
// Minimalnie uprzejme wyświetlenie – jeśli OpenAI doda pole output_text, użyj go.
if (isset($data['output_text'])) {
// Wygodne pole udostępniane przez niektóre SDK/warstwy API.
fwrite(STDOUT, $data['output_text'] . "\n");
} else {
// Fallback – pokaż „ładnie” cały JSON.
fwrite(STDOUT, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n");
}
Kilka uwag:
- To jest minimalny, świadomie prosty przykład – celem jest pokazanie schematu, nie perfekcyjna obsługa całego API.
- W prawdziwym projekcie:
- sensownie sparsujesz strukturę odpowiedzi wg aktualnej dokumentacji,
- dodasz logowanie błędów, retry, może prosty cache promptów.
- Parametry
reasoning.effortitext.verbositysą typowe dla GPT-5.1 i pozwalają sterować głębokością myślenia i rozwlekłością odpowiedzi.
Integracja z artisan / composer – realny workflow
Gdy masz już działający skrypt, możesz:
Dodać alias w composer.json
{
"scripts": {
"ai:refactor": "php bin/ai-refactor.php"
}
}
I wtedy:
composer ai:refactor app/Services/UserService.php
Zrobić komendę artisan
Możesz też zbudować Artisan Command, które:
- przyjmuje nazwę klasy / pliku,
- odnajduje ją w
app/, - wysyła do GPT-5.1 dokładnie tak jak powyższy skrypt,
- wypisuje wynik albo zapisuje do
storage/app/ai-suggestions/....
To już bardziej rozbudowany temat, ale wzorzec jest ten sam: czytasz plik → budujesz prompt → wysyłasz do GPT-5.1 → pokazujesz wynik.
Zaawansowane techniki promptowania z GPT-5.1 w pracy programisty PHP / Laravel 12
Proste „napisz mi kontroler” już ogarnęliśmy. Teraz wjeżdża poziom senior: jak sprawić, żeby ChatGPT 5.1 dla programistów PHP i Laravel nie tylko pisał kod, ale też projektował, krytykował i uczył się Twojego stylu.
W tle pamiętaj, że GPT-5.1 daje większą sterowalność (reasoning.effort, verbosity, lepsze podążanie za instrukcjami), więc zaawansowane techniki promptowania naprawdę robią różnicę.
Role prompting – „zatrudnij sobie seniora Laravel 12”
Role prompting to nic innego jak bardzo jasne określenie, kim ma być model w danej rozmowie: senior Laravelowiec, security engineer, performance freak, reviewer testów itd. Oficjalne poradniki podkreślają, że dobrze zdefiniowana rola + jasne zadanie to jeden z najlepszych „boostów” jakości odpowiedzi.
Bazowa rola – senior PHP / Laravel 12
Możesz ją używać jako wstęp niemal do każdego wątku technicznego:
Jesteś seniorem PHP / Laravel 12, który od lat pracuje nad dużymi systemami produkcyjnymi (SaaS, e-commerce, systemy finansowe).
Założenia:
- używamy PHP 8.2+, Laravel 12,
- stosujemy PSR-12 i pełne typowanie,
- preferujemy prostą, czytelną architekturę nad „sprytne” hacki,
- testy piszemy w Pest.
W swoich odpowiedziach:
- tłumacz kluczowe decyzje techniczne (krótko, konkretnie),
- zawsze sugeruj testy (Pest) dla ważniejszych fragmentów,
- zwracaj uwagę na wydajność i bezpieczeństwo (SQL, XSS, auth, uprawnienia).
To możesz mieć zapisane jako „wklejkę” otwierającą każdy nowy wątek związany z projektem.
Rola specjalistyczna – np. ekspert od bezpieczeństwa Laravel
Czasem chcesz, żeby model patrzył na kod tylko przez jeden filtr – np. bezpieczeństwo. GPT-5.1 naprawdę potrafi przełączyć tryb, jeśli rola jest dobrze zadana.
Przykład:
Jesteś ekspertem od bezpieczeństwa w PHP i Laravel 12 (aplikacje webowe, REST API, systemy finansowe).
Twoim zadaniem jest:
- znajdować luki bezpieczeństwa,
- minimalizować powierzchnię ataku,
- nie skupiać się na kosmetyce kodu, tylko na realnych ryzykach (SQL injection, XSS, CSRF, auth, uprawnienia, masowe przypisanie, injection w logice biznesowej).
Za chwilę wkleję kod – Twoim priorytetem będzie BEZPIECZEŃSTWO, nie estetyka.
Potem dopiero wklejasz kod + konkretne polecenie:
Poniżej masz kontroler w Laravel 12:
[tu kod]
Zadanie:
1. Znajdź potencjalne problemy bezpieczeństwa,
2. wyjaśnij, dlaczego są groźne,
3. zaproponuj poprawki (konkretny kod),
4. zaproponuj testy (Pest), które wykryłyby te problemy.
Rola code reviewera dla PR-ów
Inny wariant roli:
Jesteś seniorem PHP / Laravel 12, który robi code review w dużym projekcie.
Twoje priorytety:
- czytelność,
- testowalność,
- wydajność,
- bezpieczeństwo,
- utrzymanie spójności architektury.
Nie przepisuj wszystkiego na nowo. Szukaj miejsc, gdzie:
- kod jest nadmiernie skomplikowany,
- brakuje testów,
- są „dziury” w walidacji lub autoryzacji.
I dopiero wtedy:
Poniżej masz diff z PR-a:
[diff]
Zadanie:
- Wypisz listę problemów / uwag (max 15),
- oznacz, które są krytyczne, a które kosmetyczne,
- dla 3 najważniejszych problemów zaproponuj konkretne zmiany w kodzie (z fragmentami „przed” i „po”).
Few-shot prompting – naucz GPT-5.1 Twojego stylu (PHP / Laravel)
Few-shot prompting to pokazywanie modelowi 1–3 przykładów, jak coś ma wyglądać, a dopiero potem proszenie o wygenerowanie kolejnego przykładu „w tym samym stylu”. Oficjalne materiały sugerują to jako jedną z kluczowych technik przy bardziej złożonych zadaniach.
Uczenie stylu serwisów / klas
Załóżmy, że masz swój ulubiony pattern serwisów domenowych w Laravel 12. Pokazujesz GPT-5.1 realny przykład z projektu (lekko zanonimizowany) i prosisz o analogiczny dla innej domeny.
Przykład – serwis do tworzenia projektu
<?php
declare(strict_types=1);
namespace App\Domain\Projects\Services;
use App\Domain\Projects\DataTransferObjects\ProjectData;
use App\Models\Organization;
use App\Models\Project;
final class CreateProjectService
{
public function handle(Organization $organization, ProjectData $data): Project
{
// Tworzymy projekt w kontekście organizacji
/** @var Project $project */
$project = $organization->projects()->create([
'name' => $data->name,
'description' => $data->description,
'due_date' => $data->dueDate,
'owner_id' => $data->ownerId,
]);
return $project;
}
}
Few-shot prompt – „zrób to samo, ale dla zadań (Task)”
Laravel 12, PHP 8.2+, PSR-12, pełne typowanie.
Poniżej masz przykład serwisu, który tworzy projekt:
[tu wklej klasę CreateProjectService]
Zadanie:
1. Na podstawie powyższego przykładu stwórz serwis `CreateTaskService` w tym samym stylu (ta sama konwencja nazw, struktura, sposób mapowania DTO),
2. załóż istnienie `TaskData` (DTO) i relacji `Project::tasks()`.
Pokaż tylko kod nowego serwisu, bez komentarza tekstowego.
Model widzi konkretny wzorzec i dużo łatwiej trafia w Twój styl niż przy suchym opisie słownym.
Few-shot dla testów w Pest
To samo można zrobić z testami – pokazujesz, jak wygląda „ładny” test w Twoim projekcie, a potem prosisz o kolejne w tym stylu.
Przykładowy test – wzorzec
<?php
declare(strict_types=1);
use App\Models\Project;
use App\Models\User;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\postJson;
it('allows owner to create project', function (): void {
/** @var User $user */
$user = User::factory()->create();
actingAs($user, 'sanctum');
$response = postJson('/api/projects', [
'name' => 'Test Project',
'description' => 'Example',
]);
$response->assertCreated()
->assertJsonFragment([
'name' => 'Test Project',
]);
expect(Project::query()->count())->toBe(1);
});
Few-shot prompt – nowy endpoint w tym samym stylu
Laravel 12, Pest.
Poniżej masz test feature napisany w stylu, który chcę utrzymać w całym projekcie:
[tu wklej test]
Zadanie:
1. Na podstawie powyższego stylu napisz test feature dla endpointu `POST /api/projects/{project}/tasks`,
2. zachowaj:
- ten sam sposób korzystania z `actingAs` i fabryk,
- podobny poziom szczegółowości asercji,
3. załóż istnienie modeli `Project` i `Task`.
Pokaż tylko kod testu.
Dzięki few-shot promptom GPT-5.1 „łapie” styl testów, nazewnictwo, strukturę asercji.
Decomposition & plan-first prompting – model jako architekt
W oficjalnych materiałach OpenAI bardzo mocno podkreślają: przy złożonych zadaniach najpierw plan, potem kod. GPT-5.1 jest szczególnie dobry w takim trybie, bo ma lepsze sterowanie rozumowaniem (reasoning.effort) i parametr verbosity, który wpływa na długość/szczegółowość odpowiedzi.
Wzorzec – dwa etapy: „najpierw architekt, potem koder”
Etap 1 – prosisz o plan (bez kodu)
Laravel 12, PHP 8.2+.
Chcę dodać moduł rozliczeń (Billing) do aplikacji SaaS.
Założenia:
- użytkownicy mają subskrypcje,
- rozliczenia miesięczne,
- integracja z zewnętrznym procesorem płatności,
- musimy mieć historię invoice’ów i płatności.
Zadanie:
Jako senior Laravel 12 zaproponuj plan implementacji modułu w maks. 10 krokach, bez pisania kodu.
Uwzględnij:
- strukturę modeli i relacji,
- główne serwisy / klasy domenowe,
- eventy i joby,
- miejsca, gdzie będą potrzebne testy integracyjne.
Na tym etapie mówisz wyraźnie: zero kodu, tylko plan. To bardzo przyspiesza sensowną architekturę.
Etap 2 – implementacja krok po kroku
Po akceptacji planu:
Świetnie, zaakceptujmy plan.
Teraz zrealizuj krok 1 tego planu:
- migracje i modele Eloquent dla Billing.
Laravel 12, PHP 8.2+, PSR-12, pełne typowanie.
Pokaż:
- Migracje,
- Modele,
- krótkie wyjaśnienie kluczowych decyzji (pola, indeksy).
Nie ruszaj jeszcze endpointów ani serwisów.
Potem:
Przejdźmy do kroku 2: warstwa serwisów Billing.
[tu doprecyzowujesz wymagania]
Świadome sterowanie reasoning.effort i verbosity (API)
Jeśli używasz API GPT-5.1 (np. w CLI lub narzędziu wewnętrznym), warto świadomie sterować parametrami:
reasoning.effort– jak dużo „myślenia” model wykonuje,text.verbosity– jak bardzo odpowiedź ma być rozgadana / szczegółowa.
Praktyczna heurystyka:
- Proste rzeczy (mały helper, pojedyncza migracja)
reasoning.effort: "none" / "low"text.verbosity: "low" / "medium"
- Złożone rzeczy (architektura modułu, skomplikowany bug)
reasoning.effort: "medium" / "high"text.verbosity: "medium" / "high"
Dzięki temu nie przepalasz zasobów na pierdoły, a przy „grubych” tematach pozwalasz modelowi naprawdę się wysilić.
Critic prompts – zrób z GPT-5.1 wymagającego reviewera
Czasem nie chcesz, żeby model coś generował – chcesz, żeby skrytykował Twój kod/projekt. Oficjalne przewodniki sugerują, żeby w takich przypadkach bardzo jasno opisać kryteria oceny i format odpowiedzi.
Krytyka kodu według konkretnych kryteriów
Prompt – code review na 4 filtry
Laravel 12, PHP 8.2+.
Poniżej masz klasę serwisową:
[tu kod]
Zadanie:
Jako senior Laravel 12 oceń ten kod według kryteriów:
1. Czytelność,
2. Testowalność,
3. Wydajność,
4. Bezpieczeństwo.
Dla każdego kryterium:
- daj ocenę w skali 1–10,
- wypisz maks. 5 konkretnych uwag / problemów,
- zaproponuj konkretne poprawki (krótkie fragmenty kodu).
Na końcu wypisz 3 najważniejsze rzeczy, które powinienem poprawić jako pierwsze.
Dzięki takiemu promptowi dostajesz konkretną listę problemów, a nie ogólne „kod mógłby być lepiej napisany”.
Krytyka architektury modułu (nie tylko pojedynczej klasy)
Prompt – ocena modułu
Laravel 12, modular monolith.
Poniżej masz opis architektury modułu (struktura katalogów, główne klasy, zależności):
[tu opis lub fragmenty kodu]
Zadanie:
1. Oceń tę architekturę pod kątem:
- spójności domenowej,
- separacji odpowiedzialności,
- możliwości rozszerzania,
- ryzyka „god class” / nadmiernych zależności.
2. Wypisz konkretne miejsca, gdzie:
- warstwy są wymieszane,
- moduły są zbyt mocno sprzężone,
- logika domenowa wylądowała w niewłaściwym miejscu (np. kontroler).
Zaproponuj 3–5 zmian o największym wpływie, które można zrobić iteracyjnie (bez przepisywania wszystkiego od zera).
Tu bardziej interesuje Cię architektura, a nie konkretne linijki kodu – prompt to jasno określa.
Critic prompt, a potem „rewrite prompt” (dwustopniowo)
Zamiast od razu prosić: „przepisz mi to”, lepiej:
- Najpierw critic prompt – niech model powie, co jest źle,
- dopiero potem rewrite prompt – „na podstawie tej listy problemów zaproponuj poprawioną wersję”.
Przykład przepływu
Krok 1 – krytyka:
Poniżej masz mój serwis:
[tu kod]
Zadanie:
1. Znajdź problemy według kryteriów: czytelność, testowalność, bezpieczeństwo,
2. wypisz listę problemów (max 10), bez proponowania kodu.
Krok 2 – przepisanie kodu:
Na podstawie powyższej listy problemów przepisz serwis tak, aby:
- usunąć wskazane problemy,
- zachować logikę biznesową,
- nie zmieniać publicznego API klasy (sygnatur metod).
Pokaż gotowy kod, z krótkimi komentarzami przy najważniejszych zmianach.
Taki dwustopniowy flow daje Ci lepszą kontrolę – najpierw rozumiesz co jest nie tak, potem dopiero dotykasz kodu.
Bezpieczeństwo, jakość i ryzyka używania ChatGPT 5.1 w kodzie PHP / Laravel 12
ChatGPT 5.1 potrafi Ci realnie przyspieszyć robotę, ale jeśli zaczniesz bezrefleksyjnie kopiować kod do produkcji, to prędzej czy później wylądujesz z pięknym incydentem: wyciek danych, podatne endpointy, albo „magiczny” bug, którego nikt nie rozumie.
Ta część to kubeł zimnej wody: jak bezpiecznie i mądrze używać ChatGPT 5.1 w projektach Laravel 12.
Dane wrażliwe i tajemnice firmowe – czego nie wrzucać do ChatGPT
Nie karm modelu rzeczami, których nie pokazałbyś klientowi / prawnikowi
Zasada prostsza niż PSR-12:
Jeśli nie możesz tego spokojnie pokazać klientowi / compliance / prawnikowi – nie wrzucaj tego do chatu.
W szczególności nie wrzucasz:
- danych osobowych klientów (PESEL, adresy, pełne maile z danymi),
- fragmentów
.env(klucze API, hasła do DB, dane do bramek płatności), - całych dumpów z produkcji (logi, zrzuty baz, payloady z produkcji),
- dokumentów objętych NDA (specyfikacje, wewnętrzne procedury).
Zamiast tego:
- anonimizujesz dane (np.
user_1@example.comzamiast realnego maila), - maskujesz identyfikatory (
12345→USER_ID), - pokazujesz tylko fragmenty kodu, nie całe repo z configami.
Przykład złej praktyki:
Tu masz pełny plik .env, coś nie działa z konfiguracją Stripe:
[tu .env]
Przykład dobrej praktyki:
Nie działa integracja ze Stripe. Nie wklejam .env, ale:
- APP_ENV=production
- STRIPE_MODE=live
- płatności zwracają błąd 401
Poniżej masz fragment kodu integracji:
[tu kod]
Walidacja odpowiedzi – „zero trust” jako default
ChatGPT 5.1 jest mocny, ale nadal:
- może się mylić,
- może „halucynować” (wymyślać rzeczy, które brzmią prawdopodobnie, ale są fałszywe),
- może proponować rozwiązania niekompatybilne z Twoją wersją paczek / PHP / Laravel.
Złota zasada: nic nie trafia do produkcji bez walidacji
Zawsze:
- Czytasz wygenerowany kod jak PR od juniora.
- Uruchamiasz testy / aplikację lokalnie.
- Przepuszczasz przez:
- PHPStan / Psalm,
- larastan (jeśli używasz),
- testy w Pest / PHPUnit.
- Myślisz o konsekwencjach (wydajność, bezpieczeństwo, edge case’y).
Jeśli ChatGPT wygeneruje coś takiego:
User::where('email', $email)->first()->update([...]);
To powinno Ci się od razu zapalić w głowie:
- a co jeśli
first()zwrócinull? - czemu nie ma transakcji?
- czemu update jest tak luźno napisany?
Model nie ma „instynktu samozachowawczego”. Ty masz.
Bezpieczeństwo aplikacji Laravel 12 a kod z ChatGPT
Typowe niebezpieczne miejsca w kodzie generowanym przez AI
Kilka typów problemów, na które musisz patrzeć jak sokół:
1. Masowe przypisanie (mass assignment)
Częsty błąd:
Project::create($request->all());
Ryzyko:
- ktoś dorzuca pole, którego nie przewidziałeś (
is_admin,role,balance), - jeśli
fillable/guardedsą źle ustawione – masz problem.
Bezpieczniejszy wzorzec:
$validated = $request->validated();
Project::create([
'name' => $validated['name'],
'description' => $validated['description'] ?? null,
'due_date' => $validated['due_date'] ?? null,
]);
W promptach warto wprost wymagać unikania ->all() i ->input() bez walidacji:
2. Autoryzacja i uprawnienia – brak sprawdzeń
Model często generuje kod typu:
public function update(Project $project, Request $request)
{
$project->update($request->validated());
return new ProjectResource($project);
}
I nigdzie:
- nie sprawdza, czy użytkownik może aktualizować ten projekt,
- nie używa
Gate/Policy.
Pilnuj, żeby w promptach zawsze wymuszać autoryzację:
Załóż, że w projekcie używamy policy dla Project.
W kontrolerze korzystaj z $this->authorize(’update’, $project).
I potem w odpowiedzi spodziewasz się:
$this->authorize('update', $project);
3. SQL injection / niebezpieczne zapytania
GPT zwykle używa Query Buildera / Eloquent, ale czasem może podrzucić:
DB::select("SELECT * FROM users WHERE email = '$email'");
Albo:
DB::statement("DELETE FROM logs WHERE created_at < '$date'");
Ty musisz od razu to przechwycić i poprawić na:
DB::select('SELECT * FROM users WHERE email = ?', [$email]);
lub – lepiej – na Eloquent, jeśli to CRUD na modelach.
4. Dane wejściowe „na dziko” w Blade / HTML
Kolejny klasyk: wkładanie wartości do widoków bez sanity checku.
Źle:
{!! $user->name !!}
Jeśli nie masz pewności, że to bezpieczne – to prosta droga do XSS.
Domyślne {{ $user->name }} jest dużo bezpieczniejsze, bo escapuje HTML.
W promptach możesz wymuszać:
W widokach Blade stosuj {{ }} zamiast {!! !!}, chyba że wyraźnie proszę inaczej.
Jakość kodu – jak nie zrobić sobie „AI spaghetti”
Ryzyka architektoniczne
ChatGPT 5.1 ma jedną „wadę uboczną”: potrafi produkować bardzo sprytne, ale mało czytelne konstrukcje, jeśli nie postawisz granicy.
Typowe pułapki:
- wrzucanie wszystkiego w jedną klasę (serwis-godzilla),
- nadużywanie statycznych helperów,
- nadmiar „magii” (dynamiczne wywołania, refleksja,
__call, itp.), - zbyt ogólne nazwy (
Manager,Helper,Servicebez konkretu).
Jak się przed tym bronić w promptach
Wręcz wpisz to modelowi do głowy:
Unikaj „magicznych” rozwiązań.
Preferuj proste, jawne klasy o wąskiej odpowiedzialności.
Nie twórz klas typu SomethingManager lub SomethingHelper bez konkretu w nazwie.
A potem patrz, czy się słucha. Jak zacznie generować takie wynalazki – popraw prompt i kod.
Antywzorce korzystania z ChatGPT 5.1 w projektach PHP / Laravel
1. „Ctrl+C → Ctrl+V do produkcji”
Czyli:
- prompt → kod → commit → deploy.
Bez:
- testów,
- code review,
- analizy.
To jest proszenie się o problemy.
Jak powinno być:
- prompt → kod,
- lokalny przegląd (Twój),
- PR / code review (człowiek),
- testy,
- dopiero wtedy merge.
2. „Generuj mi cały moduł na raz”
Prośba typu:
„Napisz cały moduł fakturowania z integracją z Stripe, wszystkimi endpointami, testami i dokumentacją.”
Efekt:
- ściana kodu,
- klasa
InvoiceServicena 400 linii, - masa założeń, które nie pasują do Twojej domeny.
Lepiej:
- Plan (jak w poprzednich częściach):
- osobny prompt: „Zaproponuj plan modułu fakturowania (bez kodu)”,
- później:
- migracje,
- serwisy,
- endpointy,
- testy,
- dokumentacja – każde osobnym krokiem.
3. „AI wie lepiej niż ja”
Jeśli łapiesz się na zdaniu:
„Nie rozumiem co on tu zrobił, ale wygląda mądrze, to pewnie tak ma być.”
…to czerwony alarm. Twoim celem jest rozumieć, co trafia do produkcji. Jeśli odpowiedź jest zbyt skomplikowana:
- prosisz o uproszczenie:
To jest zbyt skomplikowane jak na ten przypadek.
Zapropnuj prostsze rozwiązanie, nawet kosztem „sprytu”.
albo o tłumaczenie:
Wyjaśnij krok po kroku, co robi ten fragment kodu, jakbym był nową osobą w projekcie.
4. „Zmienię tech stack, bo AI tak powiedziało”
Model może sugerować:
- inne biblioteki,
- inne wzorce,
- inne podejścia („zrób to jako mikroserwis, bo czemu nie”).
Ty odpowiadasz za:
- spójność projektu,
- koszty utrzymania,
- zgodność z tym, co zespół ogarnia.
Jeżeli GPT 5.1 mówi:
„Najlepiej byłoby przepisać to na event sourcing / CQRS / mikroserwisy / GraphQL.”
To Ty musisz zdecydować, czy:
- to ma sens biznesowy,
- zespół to uniesie,
- pasuje do roadmapy.
Jak wpleść kwestie bezpieczeństwa i jakości w same prompty
Zamiast za każdym razem pamiętać „muszę sprawdzić X, Y, Z”, możesz wbudować to w swoje prompty.
Szablon „bezpiecznego promptu” do generowania kodu
Uzupełnij o swój kontekst:
Laravel 12, PHP 8.2+, PSR-12, pełne typowanie.
Zadanie:
[tu konkretny task: endpoint, serwis, testy, itp.]
Wymagania jakościowe:
- używaj FormRequest do walidacji,
- używaj policy / Gate do autoryzacji tam, gdzie to ma sens,
- nie używaj $request->all() – dane bierz tylko z $request->validated(),
- unikaj masowego przypisania wrażliwych pól,
- nie używaj ręcznie składanych zapytań SQL – jeśli musisz, użyj wiązanych parametrów,
- w widokach Blade korzystaj z {{ }} zamiast {!! !!}, chyba że wyraźnie proszę inaczej.
Na końcu odpowiedzi wypisz:
1. potencjalne ryzyka bezpieczeństwa, które widzisz,
2. edge case’y, o które powinienem zadbać w testach.
Dzięki temu model z automatu myśli też w kategoriach bezpieczeństwa i edge case’ów, a nie tylko „żeby się kompilowało”.
Przykładowy dzień pracy programisty PHP i Laravel 12 z ChatGPT 5.1
Wyobraź sobie, że ChatGPT 5.1 to Twój stały „kolega z biurka obok” – tylko taki, który nie marudzi, nie znika na kawę i jest dostępny 24/7. Poniżej masz przykład, jak może wyglądać typowy dzień pracy mid/seniora w Laravel 12 z aktywnym użyciem ChatGPT 5.1: od porannego planowania, przez development i debugowanie, aż po dokumentację i naukę.
Poranek – plan dnia i ustawienie kontekstu w ChatGPT 5.1
Szybkie ogarnięcie zadań z Jiry / ClickUp / Trello
Masz listę ticketów na dziś, opisaną różnym poziomem chaosu:
- „poprawić walidację formularza X”,
- „dorobić raport Y”,
- „czasem wysypuje się webhook Z”.
Zamiast sortować to w głowie, wrzucasz listę do ChatGPT 5.1 (Instant lub Thinking – Thinking lepszy przy większej ilości zadań) i prosisz o uporządkowanie.
Przykładowy prompt – poranne planowanie:
Pracuję jako programista PHP / Laravel 12.
Poniżej masz listę moich zadań na dzisiaj (wyciągniętych z Jiry, trochę chaotycznych):
[lista tasków]
Zadanie:
1. Pogrupuj je tematycznie (feature / bug / tech debt),
2. zaproponuj kolejność realizacji, biorąc pod uwagę:
- zależności techniczne,
- potencjalny impact na biznes,
- to, że najcięższe rzeczy wolę robić rano.
3. Dla każdego zadania podaj:
- szacowany czas (1–2h, 2–4h, >4h),
- 2–3 kluczowe pytania, które powinienem doprecyzować z PM-em / zespołem.
Efekt: zamiast bezmyślnej listy, masz uporządkowany plan dnia.
Ustawienie sesji – kontekst projektu Laravel 12
Na początku dnia warto założyć dedykowany wątek w ChatGPT dla danego projektu, np. L12 – SaaS projekty – 2025-11-19, wrzucić tam kontekst i rolę modelu.
Przykładowy „start dnia” w wątku projektowym:
Dzisiaj będziemy pracować nad projektem w Laravel 12.
Kontekst:
- Aplikacja SaaS do zarządzania projektami (Projects, Tasks, Comments, Attachments),
- API dla SPA (frontend w Vue),
- autoryzacja przez Laravel Sanctum,
- testy w Pest.
Założenia:
- PHP 8.2+, Laravel 12, PSR-12, pełne typowanie,
- preferujemy prostą architekturę (modular monolith),
- testy jako Pest (feature + unit).
Prośba:
1. Podsumuj ten kontekst w max. 5 punktach (żebym mógł to łatwo wkleić do kolejnych promptów),
2. Potem będę podrzucał Ci konkretne taski do ogarnięcia w trakcie dnia.
Dalej w tym wątku pracujesz wyłącznie nad tym projektem – ChatGPT 5.1 ma wtedy logiczny, spójny kontekst.
Przedpołudnie – większy feature w Laravel 12
Przekład z „języka PM” na konkretne wymagania techniczne
Ticket z Jiry zwykle jest mieszanką biznesowego żargonu, skrótów myślowych i screenów. ChatGPT 5.1 może to odcedzić do sensownych wymagań.
Przykładowy prompt – „przetłumacz PM na tech”:
Poniżej masz treść ticketu z Jiry.
[treść zgłoszenia]
Laravel 12, PHP 8.2+.
Zadanie:
1. Wyciągnij z tego listę wymagań funkcjonalnych (bullet pointy),
2. zaproponuj kryteria akceptacji (Given/When/Then albo proste punkty),
3. wypisz niejasności / miejsca, które wymagają doprecyzowania (do omówienia z PM-em).
Po odpowiedzi masz klarowną listę „co dokładnie trzeba zrobić” i listę pytań do PM-a.
Projekt techniczny – model danych, endpointy, zależności
Zanim zaczniesz pisać kod, prosisz ChatGPT 5.1 Thinking o plan techniczny.
Przykładowy prompt – specyfikacja techniczna:
Na podstawie tych wymagań:
[lista wymagań]
Laravel 12, modular monolith.
Zadanie:
1. Zaproponuj model danych (tabele, pola, relacje) potrzebny do realizacji tego feature’a,
2. zaproponuj endpointy (metoda, ścieżka, parametry, odpowiedzi),
3. wypisz w maks. 10 punktach plan implementacji tego zadania (bez pisania kodu).
Nie generuj jeszcze kodu, tylko plan architektury.
Dostajesz:
- listę tabel / kolumn,
- propozycje endpointów,
- plan kroków: migracje → modele → serwisy → endpointy → testy → dokumentacja.
Implementacja w krokach – migracje, serwis, endpointy, testy
Zamiast jednego „napisz mi cały moduł”, dzielisz robotę na logiczne etapy.
Krok 1 – migracje i modele:
Teraz zrealizuj krok 1 z planu: migracje i modele.
Założenia:
- Laravel 12, PHP 8.2+, PSR-12, pełne typowanie.
Format odpowiedzi:
- klasy migracji,
- modele Eloquent z relacjami,
- krótkie wyjaśnienie kluczowych decyzji (np. indeksy, typy pól).
Nie twórz jeszcze kontrolerów ani serwisów.
Krok 2 – serwis domenowy:
Kolejny krok: serwis domenowy.
Zadanie:
- Na podstawie modelu danych przygotuj klasę serwisową w
App\Domain\...odpowiedzialną za główną logikę tego feature’a,- zaproponuj publiczne metody, ich parametry i typy zwrotne,
- przygotuj przykładowe testy unitowe w Pest dla tego serwisu.
Format:
- najpierw klasa serwisowa,
- potem testy.
Krok 3 – endpointy API:
Teraz endpointy API.
Zadanie:
- Zaimplementuj endpointy opisane w specyfikacji:
- [wymień krótko konkretne endpointy]
- Użyj:
- FormRequest do walidacji,
- Resource do odpowiedzi,
- policy / Gate do autoryzacji (tam, gdzie potrzebne).
Format:
- trasy w
routes/api.php,- klasy FormRequest,
- klasy Resource,
- kontrolery.
Na końcu zaproponuj testy feature w Pest (pełny kod).
W efekcie masz pełen zestaw: migracje, modele, serwis, kontrolery, testy – wszystko w logice, nad którą realnie panujesz.
Popołudnie – debugowanie, bugfixy i gaszenie pożarów
Reprodukcja buga – zrozumienie problemu
Masz buga typu „czasem nie zapisuje się płatność”, logi są niejasne. Zamiast gapić się w stack trace pół godziny, wrzucasz go ChatGPT 5.1 Thinking.
Przykładowy prompt – wejście w buga:
Laravel 12, moduł płatności.
Poniżej masz logi z produkcji (zredagowane, bez danych wrażliwych):
[fragment logów + stack trace]
Zadanie:
1. Streść w max. 5 punktach, co się dzieje (Twoja hipoteza),
2. wskaż potencjalne miejsca w kodzie, gdzie warto zacząć szukać przyczyny,
3. zaproponuj plan reprodukcji buga na środowisku dev/stage (scenariusze krok po kroku).
Dostajesz sensowną hipotezę i checklistę, co sprawdzić.
Analiza kodu + stack trace
Potem dorzucasz serwis / kontroler, w którym siedzi bug.
Przykładowy prompt – analiza i poprawka:
Poniżej masz stack trace oraz klasę serwisową, której dotyczy problem.
[stack trace]
[klasa serwisowa]
Zadanie:
1. Wyjaśnij krok po kroku, co doprowadza do tego wyjątku,
2. wskaż dokładne miejsce w kodzie, które powoduje błąd,
3. zaproponuj poprawkę (konkretny kod),
4. zaproponuj test w Pest, który odtwarza ten błąd.
Założenia:
- Laravel 12, PHP 8.2+,
- nie zmieniamy technologii, tylko naprawiamy buga,
- zależy nam na minimalnej, ale solidnej zmianie.
Masz diagnozę + propozycję fixa + test odtwarzający problem.
Polowanie na edge case’y po poprawce
Po fixie warto użyć ChatGPT jako „audytora zmian”.
Przykładowy prompt – sanity check na patchu:
Poniżej masz oryginalną wersję metody oraz poprawioną:
[stary kod]
[nowy kod]
Zadanie:
1. Czy widzisz nowe edge case’y, które mogły zostać wprowadzone tą zmianą?
2. Wypisz 3–5 scenariuszy testowych (Pest), które warto dodać, żeby upewnić się, że poprawka jest stabilna.
3. Oceń, czy w tej metodzie nie przydałaby się dodatkowa walidacja / logging / obsługa wyjątków.
Pomiędzy taskami – małe rzeczy, w których ChatGPT 5.1 błyszczy
Regułki, SQL, regexy, dziwne błędy z Composerem
Zamiast za każdym razem przepalać czas na googlowanie:
- regex do parsowania
Budynek 1 K.03, - hurtowe zapytanie w MySQL 8 z grupowaniem po miesiącu,
- error z
composer installna konkretnej wersji paczki,
wrzucasz do modelu (Instant w zupełności wystarczy) krótki prompt:
Mam błąd z composerem:
[log]
Zadanie:
1. Wyjaśnij, co ten błąd oznacza,
2. zaproponuj 2–3 sposoby rozwiązania (bez rozwalania całego lockfile).
Szybkie refaktoryzacje i kosmetyka
Masz kod, który działa, ale wygląda tak sobie:
if ($user->role === 'admin' || $user->role === 'manager') {
// ...
}
Możesz poprosić:
Laravel 12.
Poniżej masz fragment kodu:
[tu kod]
Zadanie:
1. Zaproponuj prostą, czytelną refaktoryzację,
2. nie zmieniaj logiki biznesowej,
3. nie używaj „magicznych” rozwiązań ani przesadnie skomplikowanych wzorców.
I masz szybkie „odkurzanie” kodu między większymi zadaniami.
Koniec dnia – dokumentacja, podsumowanie, nauka
Changelog techniczny i podsumowanie dla biznesu
Na koniec dnia zrzucasz do ChatGPT 5.1 skrót tego, co zrobiłeś: listę PR-ów, ticketów, commitów.
Przykładowy prompt – podsumowanie dnia:
Dzisiaj zrealizowałem następujące zmiany:
- [lista PR-ów / commitów / ticketów]
Zadanie:
- Przygotuj changelog techniczny (maks. 10 punktów),
- przygotuj krótkie podsumowanie „dla biznesu” (2–3 akapity, zrozumiałe dla PM-a / klienta),
- wypisz 3–5 potencjalnych ryzyk / tematów, do których powinniśmy wrócić w kolejnym sprincie.
Masz gotowy tekst do:
CHANGELOG.md,- komentarza w Jirze,
- maila do klienta.
Retrospekcja techniczna – co mogło być lepiej
Jeżeli chcesz potraktować ChatGPT 5.1 jak mentora:
Dzisiaj pracowałem nad:
- [opis feature’a / buga],
- [ewentualne linki do diffów / fragmentów kodu].
Zadanie:
- Na podstawie tego, co opisałem (i kodu powyżej), wypisz 3–5 rzeczy, które mogłem zrobić lepiej od strony:
- architektury,
- testów,
- komunikacji (opisy PR-ów, ticketów).
- Zaproponuj mi „zadanie domowe” – co mógłbym przeczytać / przećwiczyć, żeby być lepszym w tym obszarze (Laravel / PHP / architektura).
Masz mini-retro + sugestię kierunku rozwoju.
Nauka „po trochu”, a nie kursy po 30 godzin
Na koniec możesz odpalić micro-learning:
Chcę w Laravel 12 lepiej ogarniać:
- [np. architekturę heksagonalną / CQRS / event sourcing / zaawansowane kolejki]
Zadanie:
- Wytłumacz mi to w kontekście aplikacji biznesowej (bez akademickiego bełkotu),
- pokaż mini-przykład w Laravel 12 (kod),
- zaproponuj 3 małe ćwiczenia, które mogę zrobić jutro w pracy na istniejącym projekcie, żeby to zastosować.
Codziennie po kilka minut i poziom wchodzi naturalnie.
Podsumowanie
Jeśli miałbym streścić cały ten artykuł w jednym zdaniu, brzmiałoby ono mniej więcej tak:
ChatGPT 5.1 nie zastąpi programisty PHP/Laravel 12 – ale może zrobić z Ciebie programistę, który robi więcej, szybciej i z mniejszą ilością głupich błędów.
Przeszliśmy przez cały „ekosystem” pracy z ChatGPT 5.1 z perspektywy dev-a:
- zrozumienie, czym ten model w ogóle jest i co potrafi,
- ustawienie go pod siebie (PHP 8.2+, Laravel 12, PSR-12, Pest, konkretny projekt),
- opanowanie sensownego promptowania (Kontekst → Zadanie → Ograniczenia → Format),
- gotowe prompty do codziennych zadań w Laravel 12,
- scenariusze end-to-end (nowy projekt, legacy, nowy feature),
- integrację z IDE i własnymi narzędziami (API, CLI, artisan),
- zaawansowane techniki (role, few-shot, critic, plan-first),
- oraz bezpieczeństwo, jakość i realne ryzyka.
Wspólny mianownik jest jeden: ChatGPT 5.1 staje się Twoim stałym partnerem, nie generatorami „magicznych snippetów”.
W praktyce oznacza to kilka konkretnych rzeczy, które możesz wdrożyć od razu:
- Przestań zadawać ogólne pytania.
„Napisz kontroler w Laravel” to proszenie się o średni kod. Używaj schematu:- Kontekst projektu,
- Dokładne zadanie,
- Ograniczenia techniczne (Laravel 12, wersja PHP, style, polityki bezpieczeństwa),
- Format odpowiedzi (jakie pliki, w jakiej kolejności, czy mają być testy).
- Traktuj ChatGPT 5.1 jak seniora, nie jak generator.
Najpierw poproś o plan (architekturę, kroki), dopiero potem o kod.
Szczególnie przy większych rzeczach: moduły billing, integracje, refaktoryzacja legacy. - Buduj własną „ściągę z promptów” pod Laravel 12.
Masz w artykule gotowe wzorce:- generowanie kontrolerów + FormRequest + Resource + testów,
- migracje + modele + relacje,
- serwisy domenowe,
- jobs/events/listeners,
- testy w Pest,
- refaktoryzacja legacy PHP → czyste klasy,
- debugowanie na podstawie logów + stack trace’ów.
Warto trzymać to w jednym pliku w repo i dopasowywać do standardów zespołu.
- Wepnij ChatGPT w realny workflow, a nie tylko w przeglądarkę.
– osobne wątki per projekt,
– integracja z IDE do refaktoryzacji i generowania testów,
– prosty klient CLI / artisan do analizy plików czy diffów przez API GPT-5.1.
Wtedy ChatGPT staje się częścią procesu, a nie „czasem sobie coś wygeneruję”. - Bezpieczeństwo i jakość to Twoja odpowiedzialność.
Model:- nie zna Twoich NDA,
- nie będzie za Ciebie myślał o RODO,
- nie ponosi odpowiedzialności za wycieki z
.envani masowe przypisanie wrażliwych pól.
Ty: - nie wrzucasz sekretów i danych wrażliwych do chatu,
- czytasz wygenerowany kod jak PR od juniora,
- przepuszczasz wszystko przez testy i narzędzia statycznej analizy,
- pilnujesz autoryzacji, walidacji, mass assignment, SQL/XSS, uprawnień.
Z perspektywy programisty PHP/Laravel 12 największą wartość ChatGPT 5.1 daje tam, gdzie łączy się kilka elementów naraz:
- rozumienie domeny biznesowej (bo dostaje sensowny kontekst),
- projektowanie architektury (bo najpierw prosisz o plan),
- generowanie kodu (bo dokładnie mówisz, czego oczekujesz),
- testowanie i krytyka (bo używasz critic prompts i wymuszasz testy),
- dokumentowanie (bo każesz mu robić changelog, ADR-y, docsy pod devów i PM-ów).
To nie jest „magiczny przycisk do pisania projektów za Ciebie”.
To jest bardzo dobry multiplier Twojej pracy – im lepiej sam ogarniasz PHP/Laravel, tym więcej z niego wyciągniesz.
Dodaj komentarz