question |
réponse |
Jak zabezpieczyć model Eloquent przed mass assignment? commencer à apprendre
|
|
Jawnie dozwolone pola ($fillable) lub odpowiednio chroniony model ($guarded), a dane wejściowe najpierw zwalidować - nie przekazywać niezwalidowanego request->all() bezpośrednio do mass assignment.
|
|
|
Jak Blade {{$x}} chroni domyślnie przed XSS? commencer à apprendre
|
|
Automatycznie przepuszcza wartość przez htmlspecialchars, więc wstrzyknięty <script> renderuje się jako zwykły tekst.
|
|
|
Kiedy {!!! $x!!!} w Blade jest niebezpieczne? commencer à apprendre
|
|
Gdy wyświetla dane wprost od użytkownika bez sanityzacji - świadomie wyłącza auto-escaping.
|
|
|
Co robi session()->regenerate() i kiedy jest wołane? commencer à apprendre
|
|
Generuje nowy session ID przy logowaniu, unieważniając stary - chroni przed session fixation.
|
|
|
Jakie realne ryzyko stwarza APP_DEBUG=true na produkcji? commencer à apprendre
|
|
Nieobsłużony wyjątek ujawnia pełny stack trace i często zmienne środowiskowe każdemu odwiedzającemu.
|
|
|
Gdzie jeszcze mogą wyciekać sekrety poza samym. env? commencer à apprendre
|
|
W logach aplikacyjnych, na stronie debug, w zcache'owanym bootstrap/cache/config. php i w logach CI/CD.
|
|
|
Co tworzy bootstrap/app. php przy starcie Laravela? commencer à apprendre
|
|
Instancję Illuminate\Foundation\Application, czyli sam kontener DI.
|
|
|
Jaka klasa jest pobierana z kontenera i woła handle() na requeście? commencer à apprendre
|
|
Illuminate\Contracts\Http\Kernel.
|
|
|
Co robi bootstrap() Kernela? commencer à apprendre
|
|
Uruchamia LoadEnvironmentVariables, LoadConfiguration, RegisterProviders i BootProviders.
|
|
|
Przez co przechodzi request zanim trafi do Routera? commencer à apprendre
|
|
Przez Pipeline z globalnym middleware zdefiniowanym w Kernelu.
|
|
|
Kiedy wołane jest terminate() na middleware? commencer à apprendre
|
|
Po wysłaniu response do klienta, w kernel->terminate().
|
|
|
Gdzie od Laravel 11 konfiguruje się middleware globalne zamiast w Kernel. php? commencer à apprendre
|
|
W bootstrap/app. php przez fluent API Application: configure().
|
|
|
Dlaczego route: cache wywala się przy trasie z closure? commencer à apprendre
|
|
Closure nie da się serializować do pliku cache - trasa musi wskazywać na kontroler.
|
|
|
Ile instancji zwróci dwukrotne app()->make() po zarejestrowaniu przez bind()? commencer à apprendre
|
|
Dwie różne instancje - bind() tworzy nową za każdym razem.
|
|
|
Ile instancji zwróci dwukrotne app()->make() po zarejestrowaniu przez singleton()? commencer à apprendre
|
|
Jedną, tę samą instancję z cache kontenera.
|
|
|
Jaka jest pułapka singletona w Laravel Octane? commencer à apprendre
|
|
Kontener żyje dłużej niż jeden request - mutowalny stan singletona wycieka między requestami.
|
|
|
Czym różni się scoped() od singleton()? commencer à apprendre
|
|
scoped() jest resetowany między requestami w Octane/queue workerach, singleton nie.
|
|
|
Co robi instance() w kontenerze? commencer à apprendre
|
|
Wstrzykuje już gotowy, wcześniej utworzony obiekt jako binding.
|
|
|
|
commencer à apprendre
|
|
Rejestruje binding tylko jeśli jeszcze nie istnieje - przydatne w pakietach, by nie nadpisać configu aplikacji.
|
|
|
Co to jest contextual binding? commencer à apprendre
|
|
Różna implementacja tego samego interfejsu zależnie od klasy, do której jest wstrzykiwana.
|
|
|
Co robi kontener, gdy w konstruktorze jest type-hint na interfejs bez bindingu? commencer à apprendre
|
|
Rzuca BindingResolutionException.
|
|
|
Do czego służy app()->tag()? commencer à apprendre
|
|
Grupuje wiele bindingów pod jednym tagiem, żeby pobrać je razem.
|
|
|
Dlaczego register() nie może zakładać, że inne providery już się zarejestrowały? commencer à apprendre
|
|
Laravel woła register() na wszystkich providerach, dopiero potem boot() na wszystkich.
|
|
|
Co to są deferred providery? commencer à apprendre
|
|
Providery ładowane dopiero gdy ktoś faktycznie zażąda ich bindingu z kontenera, nie przy starcie aplikacji.
|
|
|
Co się dzieje, gdy PHP nie znajduje statycznej metody get() na klasie Route? commencer à apprendre
|
|
Wywołuje magiczną __callStatic(), która przez Facade deleguje do realnej instancji z kontenera.
|
|
|
Jaka metoda facade zwraca nazwę bindingu, np. router? commencer à apprendre
|
|
|
|
|
Jaka jest realna wada nadużywania facades? commencer à apprendre
|
|
Ukryte zależności - sygnatura konstruktora nie pokazuje, czego klasa naprawdę potrzebuje.
|
|
|
Dlaczego env('APP_DEBUG') w kontrolerze zwróci null po config: cache? commencer à apprendre
|
|
Po cache'owaniu configu plik. env w ogóle nie jest wczytywany.
|
|
|
Gdzie wolno wołać env(), a gdzie nie? commencer à apprendre
|
|
W plikach config/*. php - w kodzie aplikacji korzystać z config(), bo po config: cache bezpośrednie env() poza konfiguracją może zwrócić null.
|
|
|
Co robi php artisan optimize? commencer à apprendre
|
|
Odpala łącznie config: cache, route: cache i view: cache.
|
|
|
Jakie ryzyko niesie optimize bez uprzedniego optimize: clear przy deployu? commencer à apprendre
|
|
Aplikacja może działać na starej, zamrożonej konfiguracji mimo zmienionych plików źródłowych.
|
|
|
Jak działa implicit route model binding? commencer à apprendre
|
|
Laravel woła User: where('id', $value)->firstOrFail() na podstawie type-hintu w kontrolerze.
|
|
|
Co zwraca aplikacja, gdy implicit route model binding nie znajdzie rekordu? commencer à apprendre
|
|
404, bo ModelNotFoundException jest automatycznie tłumaczony przez exception handler.
|
|
|
Jaki wzorzec projektowy stoi za middleware pipeline? commencer à apprendre
|
|
Pipeline - zagnieżdżone closures, de facto Decorator/Chain of Responsibility.
|
|
|
W jakiej kolejności wykonuje się kod po $next($request) w łańcuchu middleware? commencer à apprendre
|
|
W odwrotnej kolejności niż middleware były rejestrowane.
|
|
|
Co to jest terminable middleware? commencer à apprendre
|
|
Middleware z metodą terminate(), wołaną po wysłaniu response do klienta.
|
|
|
Dlaczego Post: with('comments')->get() czasem nie eliminuje N+1 przy dostępie do autora komentarza? commencer à apprendre
|
|
Bo relacja author nie została dociągnięta - trzeba with('comments. author').
|
|
|
Czy eager loading widzi N+1 ukryty w accessorze/getXAttribute()? commencer à apprendre
|
|
Nie - accessor to zwykły kod PHP, nie zadeklarowana relacja Eloquent.
|
|
|
Jakie narzędzie w Laravelu rzuca wyjątkiem przy każdej próbie lazy loadingu? commencer à apprendre
|
|
Model: preventLazyLoading() w AppServiceProvider: boot().
|
|
|
Czym różni się chunk() od cursor() pamięciowo? commencer à apprendre
|
|
chunk() hydratuje wiele modeli naraz, cursor() jeden model przez generator - mniej pamięci.
|
|
|
Który wybrać, gdy modyfikujesz dane w trakcie iteracji: chunk czy cursor? commencer à apprendre
|
|
chunkById - zwykły chunk może przeskoczyć rekordy przy usuwaniu w trakcie iteracji.
|
|
|
Jaka jest kolejność eventów modelu przy create()? commencer à apprendre
|
|
saving -> creating -> insert -> created -> saved.
|
|
|
Jaka jest kolejność eventów modelu przy update()? commencer à apprendre
|
|
saving -> updating -> update -> updated -> saved.
|
|
|
Czym jest Observer w Eloquencie? commencer à apprendre
|
|
Klasa z metodami o nazwach eventów modelu, rejestrowana przez Model: observe().
|
|
|
Dlaczego global scope bywa niebezpieczny? commencer à apprendre
|
|
Jest niewidoczny w miejscu wywołania - User: count() może zwrócić zaniżoną liczbę bez żadnego sygnału.
|
|
|
Co zapisuje trait SerializesModels przy dispatchu joba z modelem? commencer à apprendre
|
|
Nie serializuje całego modelu - zapisuje identyfikator modelu i informacje potrzebne do odtworzenia go po stronie workera, relacje mogą zostać ponownie załadowane zależnie od tego, co faktycznie zostało zserializowane.
|
|
|
Dlaczego dane w jobie mogą różnić się od stanu w momencie dispatch? commencer à apprendre
|
|
Worker przy odpaleniu joba pobiera świeży rekord z bazy, nie zapisaną kopię.
|
|
|
Czym różni się connection od queue w config/queue. php? commencer à apprendre
|
|
connection to backend (redis/sqs/database), queue to nazwa kolejki w ramach tego backendu.
|
|
|
Czym różni się failed_jobs w Laravelu od DLQ w SQS? commencer à apprendre
|
|
failed_jobs to mechanizm Laravela do zapisywania nieudanych jobów, DLQ to mechanizm brokera/kolejki - dokładne zachowanie zależy od drivera oraz konfiguracji retry i visibility timeout.
|
|
|
W jakiej kolejności budować cache przy zero-downtime deployu? commencer à apprendre
|
|
config: cache, route: cache, view: cache, migrate --force - dopiero potem przełączenie symlinku.
|
|
|
Czym różni się queue: restart od twardego kill procesu workera? commencer à apprendre
|
|
queue: restart pozwala workerowi dokończyć bieżący job i dopiero potem się zamknąć.
|
|
|
Jak assertować brak N+1 w teście Laravela? commencer à apprendre
|
|
DB: enableQueryLog() przed requestem, potem assertLessThanOrEqual na count(DB: getQueryLog()).
|
|
|
Dlaczego relacja morphTo jest trudniejszym przypadkiem N+1? commencer à apprendre
|
|
Generuje osobne zapytanie per typ powiązanego modelu, bo różne typy leżą w różnych tabelach.
|
|
|
Co robi DatabaseTransactions w testach Laravela? commencer à apprendre
|
|
Owija każdy test w transakcję i robi ROLLBACK na końcu, bez resetowania struktury bazy.
|
|
|
Co robi RefreshDatabase w testach Laravela? commencer à apprendre
|
|
Sprawdza czy migracje są aktualne, odpala je jeśli nie, i korzysta z transakcji per test.
|
|
|
Kiedy RefreshDatabase jest konieczny mimo że wolniejszy? commencer à apprendre
|
|
Gdy test jest wrażliwy na strukturę schematu albo sam robi commit/rollback ręcznie.
|
|
|
Jaka jest minimalna wersja PHP wymagana przez Laravel 11? commencer à apprendre
|
|
|
|
|
Co zniknęło ze szkieletu aplikacji w Laravel 11? commencer à apprendre
|
|
app/Http/Kernel. php i app/Console/Kernel. php - konfiguracja przeniosła się do bootstrap/app. php.
|
|
|
Co zmienił Laravel 10 w typowaniu kodu? commencer à apprendre
|
|
Wprowadził natywne typy PHP we wszystkich metodach szkieletu i core frameworka.
|
|
|
Czym charakteryzuje się Laravel 12 względem Laravel 11? commencer à apprendre
|
|
Głównie aktualizacją zależności i nowymi starter kitami, bez dużych zmian strukturalnych.
|
|
|
Co to jest Laravel Precognition? commencer à apprendre
|
|
Mechanizm pozwalający walidować formularz na frontendzie bez duplikowania reguł walidacji z backendu.
|
|
|
Jakie są główne typy relacji w Eloquencie? commencer à apprendre
|
|
hasOne, hasMany, belongsTo, belongsToMany, hasManyThrough, morphMany/morphTo.
|
|
|
Czym różni się hasMany od belongsToMany? commencer à apprendre
|
|
hasMany to relacja 1: N przez klucz obcy, belongsToMany to N: N przez tabelę pośredniczącą (pivot).
|
|
|
Jak działają casty (casts()) przy odczycie atrybutu z bazy? commencer à apprendre
|
|
Eloquent przepuszcza surową wartość z PDO przez castAttribute() zgodnie z deklaracją, np. tworząc obiekt Carbon dla typu datetime.
|
|
|
Jak dziś zapisuje się mutator/accessor jednego atrybutu w Eloquencie (Laravel 9+)? commencer à apprendre
|
|
Jedna metoda zwracająca Attribute: make(get: ..., set: ...), zamiast osobnych getXAttribute()/setXAttribute().
|
|
|
Czym różni się local scope od global scope w Eloquencie? commencer à apprendre
|
|
Local scope jest świadomie wywoływany (User: active()), global scope dokłada się automatycznie do każdego zapytania na modelu.
|
|
|
Czym różnią się middleware grupy web i api w Laravelu? commencer à apprendre
|
|
web dokłada sesję i ochronę CSRF, api dokłada throttling bez sesji.
|
|
|
Czym różni się explicit route model binding od implicit? commencer à apprendre
|
|
Explicit rejestrujesz ręcznie przez Route: bind() z pełną kontrolą nad zapytaniem, implicit dzieje się automatycznie na podstawie type-hintu.
|
|
|
Jak Laravel harmonogramuje zadania cykliczne (Task Scheduling)? commencer à apprendre
|
|
Kodem w repozytorium przez $schedule->command(...)->daily(), jednym wpisem crona wołającym schedule: run.
|
|
|
Co to jest Package Discovery w Laravelu? commencer à apprendre
|
|
Paczki deklarują providery w composer. json (extra. laravel. providers), Laravel rejestruje je automatycznie bez ręcznej konfiguracji.
|
|
|
Jak zmockować wysyłkę maila w teście Laravela? commencer à apprendre
|
|
Mail: fake() przed akcją, potem Mail: assertSent().
|
|
|
Dlaczego mockowanie facade jest bezpieczne? commencer à apprendre
|
|
Facade to warstwa nad realnym obiektem z kontenera - podmiana instancji zmienia to, co widzi cała aplikacja.
|
|
|
Jak przetestować sam fakt dispatchu joba bez workera? commencer à apprendre
|
|
Queue: fake() i Queue: assertPushed().
|
|
|
Jak przetestować samą logikę joba bez mechanizmu kolejki? commencer à apprendre
|
|
Wywołać (new Job($x))->handle() bezpośrednio jak zwykłą klasę.
|
|
|
Dlaczego assertDatabaseHas() jest bezpieczniejsze niż sprawdzanie return z save()? commencer à apprendre
|
|
Weryfikuje faktyczny stan bazy, niezależnie jaką ścieżką zapis nastąpił.
|
|
|
Jaki jest odpowiednik loginUser() w Laravelu? commencer à apprendre
|
|
|
|
|
Jak bezpiecznie zrestartować worker bez przerywania joba w trakcie? commencer à apprendre
|
|
queue: restart w Laravelu - kończy bieżący job, potem się zamyka.
|
|
|
Kiedy wybrać Sanctum zamiast Passport w Laravelu? commencer à apprendre
|
|
Gdy masz własny, ufany frontend (SPA/mobile), nie zewnętrznych deweloperów.
|
|
|
Kiedy wybrać Passport zamiast Sanctum? commencer à apprendre
|
|
Gdy API mają konsumować zewnętrzni deweloperzy z pełnym flow OAuth2 i scope'ami.
|
|
|
Jak Sanctum rozpoznaje request z SPA jako stateful? commencer à apprendre
|
|
Middleware EnsureFrontendRequestsAreStateful sprawdza domenę w config('sanctum. stateful').
|
|
|
Kiedy Form Request jest rozwiązywany względem wywołania kontrolera? commencer à apprendre
|
|
Przed - jako część wstrzykiwania argumentów w ArgumentResolverze.
|
|
|
Co się dzieje, gdy authorize() w Form Request zwróci false? commencer à apprendre
|
|
Kontroler się nie wykonuje, leci AuthorizationException.
|
|
|
Czym różni się singleton() w kontenerze Laravela od klasycznego wzorca Singleton? commencer à apprendre
|
|
Kontener zarządza jedną instancją per binding, ale sama klasa nie wymusza tego ograniczenia - to kontener, nie klasa, gwarantuje unikalność.
|
|
|
Co to jest Facade w Laravelu, w skrócie? commencer à apprendre
|
|
Statyczny interfejs do obiektu faktycznie zarejestrowanego w kontenerze DI, np. Cache: get() zamiast wstrzykiwać CacheManager.
|
|
|
Co to jest Service Provider w skrócie? commencer à apprendre
|
|
Miejsce rejestracji bindingów w kontenerze i konfiguracji danej funkcjonalności przy starcie aplikacji Laravel.
|
|
|
Co robi Artisan w Laravelu? commencer à apprendre
|
|
Wbudowane narzędzie CLI do generowania kodu, migracji, kolejek i innych zadań administracyjnych.
|
|
|
Co robi opcja retry_after w konfiguracji kolejki? commencer à apprendre
|
|
Określa po ilu sekundach job bez potwierdzenia zostanie uznany za martwy i ponownie umieszczony w kolejce - musi być dłuższy niż realny czas wykonania joba.
|
|
|
Jak ustawić rosnące opóźnienie między kolejnymi próbami joba w Laravelu? commencer à apprendre
|
|
Metoda backoff() na klasie joba, zwracająca liczbę sekund albo tablicę opóźnień per kolejna próba.
|
|
|
Dlaczego joby w Laravelu powinny być idempotentne? commencer à apprendre
|
|
Queue gwarantuje at-least-once delivery - ten sam job może wykonać się więcej niż raz, np. po timeout i redelivery.
|
|
|
Jak zapobiec dodaniu duplikatu tego samego joba do kolejki w Laravelu? commencer à apprendre
|
|
Implementacja interfejsu ShouldBeUnique - Laravel trzyma lock w cache, dopóki job nie zostanie przetworzony albo lock nie wygaśnie.
|
|
|
Co robi właściwość $timeout na klasie joba? commencer à apprendre
|
|
Maksymalny czas wykonania joba w sekundach - po przekroczeniu worker zabija proces, a job trafia do ponowienia albo do failed_jobs.
|
|
|
Czym różni się retryUntil() od tries na klasie joba? commencer à apprendre
|
|
tries liczy liczbę prób, retryUntil() ustawia twardy deadline czasowy - job przestaje być ponawiany po tej dacie niezależnie od liczby prób.
|
|
|
Czym różni się chain od batch w Laravel Queues? commencer à apprendre
|
|
Chain wykonuje joby sekwencyjnie jeden po drugim, batch uruchamia grupę jobów równolegle i pozwala śledzić ich łączny postęp.
|
|
|
Co robi driver kolejki sync w Laravelu? commencer à apprendre
|
|
Wykonuje job natychmiast, synchronicznie, w tym samym requeście - używany głównie lokalnie/w testach, nie na produkcji.
|
|
|