Pytania na rozmowę kwalifikacyjną PHP Laravel Developer 2026: Kompletny przewodnik przygotowawczy
Kompleksowy przewodnik po pytaniach technicznych na rozmowę kwalifikacyjną dla programistów PHP Laravel w 2026 roku. Obejmuje Eloquent ORM, Service Container, autoryzację, kolejki i testowanie.

Pytania na rozmowę kwalifikacyjną dla programistów PHP Laravel weryfikują zarówno znajomość frameworka, jak i zasady projektowania oprogramowania. Laravel 13, wydany w marcu 2026 roku, wprowadził AI SDK, PHP Attributes oraz uwierzytelnianie Passkey, dlatego rekruterzy oczekują od kandydatów znajomości zarówno aktualnych funkcji, jak i podstawowych mechanizmów frameworka.
Rozmowy o Laravel zazwyczaj obejmują pięć filarów: relacje Eloquent ORM i wydajność, Service Container i wstrzykiwanie zależności, wzorce uwierzytelniania i autoryzacji, obsługa kolejek i zadań oraz strategie testowania. Stanowiska seniorskie dodatkowo wymagają znajomości decyzji architektonicznych i ekosystemu pakietów.
Eloquent ORM i pytania o bazę danych
Eloquent pozostaje najczęściej omawianym tematem podczas rozmów o Laravel. Rekruterzy sprawdzają, czy kandydaci rozumieją różnice między lazy loading a eager loading, typy relacji oraz optymalizację zapytań.
P: Czym jest problem N+1 i jak Laravel go rozwiązuje?
Problem N+1 występuje, gdy kod wykonuje jedno zapytanie pobierające kolekcję, a następnie N dodatkowych zapytań do załadowania powiązanych danych dla każdego elementu. Laravel rozwiązuje to poprzez eager loading za pomocą metody with().
// Problem N+1: 1 zapytanie dla postów + N zapytań dla autorów
$posts = Post::all();
foreach ($posts as $post) {
echo $post->author->name; // Wywołuje zapytanie dla każdego posta
}
// Rozwiązanie: Eager loading z with()
$posts = Post::with('author')->get(); // Łącznie 2 zapytania
foreach ($posts as $post) {
echo $post->author->name; // Brak dodatkowych zapytań
}Laravel 13 utrzymuje tryb ścisły w środowisku deweloperskim, który rzuca wyjątek przy lazy loading, pomagając wykryć problemy N+1 na wczesnym etapie.
P: Wyjaśnij różnicę między hasOne, hasMany, belongsTo i belongsToMany.
| Relacja | Lokalizacja klucza obcego | Przykład |
|---|---|---|
| hasOne | W powiązanym modelu | User hasOne Profile (profiles.user_id) |
| hasMany | W powiązanym modelu | User hasMany Posts (posts.user_id) |
| belongsTo | W bieżącym modelu | Post belongsTo User (posts.user_id) |
| belongsToMany | Tabela pośrednia | User belongsToMany Roles (tabela role_user) |
P: Jak obsługiwać soft deletes i jakie są tego konsekwencje?
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// Rekordy soft-deleted są domyślnie wykluczane
// Aby je uwzględnić:
// Post::withTrashed()->get();
// Aby pobrać tylko usunięte:
// Post::onlyTrashed()->get();
}Soft deletes dodają kolumnę deleted_at. Zapytania automatycznie wykluczają rekordy soft-deleted, chyba że jawnie tego zażądano. Wpływa to na ograniczenia unikalności i wymaga indeksów złożonych zawierających deleted_at dla optymalnej wydajności.
Service Container i wstrzykiwanie zależności
Service Container stanowi rdzeń Laravela. Zrozumienie bindingu, rozwiązywania zależności i kontekstowego wstrzykiwania odróżnia juniorów od seniorów.
P: Czym jest Service Container i dlaczego jest ważny?
Service Container to potężne narzędzie do zarządzania zależnościami klas i wykonywania wstrzykiwania zależności. Automatycznie rozwiązuje zależności poprzez refleksję PHP, eliminując ręczne tworzenie instancji.
public function register(): void
{
// Prosty binding
$this->app->bind(PaymentGateway::class, StripeGateway::class);
// Singleton - ta sama instancja za każdym razem
$this->app->singleton(CacheManager::class, function ($app) {
return new CacheManager($app['config']['cache']);
});
// Binding kontekstowy
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function () {
return Storage::disk('photos');
});
}P: Jaka jest różnica między bind(), singleton() i instance()?
| Metoda | Zachowanie | Przypadek użycia |
|---|---|---|
| bind() | Nowa instancja za każdym rozwiązaniem | Obiekty stanowe, żądania HTTP |
| singleton() | Ta sama instancja w całej aplikacji | Menedżery cache, połączenia |
| instance() | Wiązanie istniejącej instancji | Testowanie, mocki |
Uwierzytelnianie i autoryzacja
Laravel 13 wprowadza natywne wsparcie Passkey obok tradycyjnych metod uwierzytelniania. Kandydaci powinni rozumieć zarówno nowe, jak i klasyczne podejścia.
P: Wyjaśnij różnicę między uwierzytelnianiem a autoryzacją w Laravel.
Uwierzytelnianie weryfikuje tożsamość użytkownika (kto to jest), podczas gdy autoryzacja określa uprawnienia (co może robić). Laravel oddziela te koncepcje: Guards obsługują uwierzytelnianie, a Gates i Policies zarządzają autoryzacją.
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->hasRole('editor');
}
public function delete(User $user, Post $post): bool
{
return $user->id === $post->user_id
|| $user->hasRole('admin');
}
}
// Użycie w kontrolerze
public function update(Request $request, Post $post)
{
$this->authorize('update', $post);
// Kontynuuj aktualizację...
}P: Kiedy używać Gates vs Policies?
Gates najlepiej sprawdzają się w prostych kontrolach autoryzacji niezwiązanych z konkretnymi modelami. Policies grupują logikę autoryzacji wokół modeli, zapewniając czystszą organizację dla operacji CRUD.
Gate::define('access-admin', function (User $user) {
return $user->is_admin || $user->hasRole('super-admin');
});
// Użycie
if (Gate::allows('access-admin')) {
// Pokaż panel administracyjny
}Kolejki i obsługa zadań
Przetwarzanie w tle jest niezbędne dla skalowalnych aplikacji. Rekruterzy sprawdzają zrozumienie konfiguracji kolejek, obsługi błędów i wzorców ponawiania prób.
P: Jak działają kolejki Laravel i kiedy ich używać?
Kolejki odraczają czasochłonne zadania na późniejsze przetwarzanie. Typowe przypadki użycia to wysyłanie e-maili, przetwarzanie obrazów i wywołania API.
class ProcessPodcast implements ShouldQueue
{
use Queueable;
public int $tries = 3;
public int $backoff = 60; // sekundy między próbami
public int $timeout = 300; // maksymalny czas wykonania
public function __construct(
public Podcast $podcast
) {}
public function handle(AudioProcessor $processor): void
{
$processor->process($this->podcast->audio_path);
}
public function failed(Throwable $exception): void
{
// Powiadom administratora o niepowodzeniu
Log::error('Przetwarzanie podcastu nieudane', [
'podcast_id' => $this->podcast->id,
'error' => $exception->getMessage()
]);
}
}
// Wysyłanie zadania
ProcessPodcast::dispatch($podcast)->onQueue('audio');P: Wyjaśnij job batching i job chaining.
Job batching grupuje wiele zadań i wykonuje wywołania zwrotne po ich zakończeniu. Job chaining wykonuje zadania sekwencyjnie, zatrzymując się na niepowodzeniach.
// Job batching
Bus::batch([
new ProcessPodcast($podcast1),
new ProcessPodcast($podcast2),
new ProcessPodcast($podcast3),
])->then(function (Batch $batch) {
// Wszystkie zadania zakończone pomyślnie
})->catch(function (Batch $batch, Throwable $e) {
// Obsługa pierwszego niepowodzenia
})->finally(function (Batch $batch) {
// Batch zakończony (z sukcesem lub błędem)
})->dispatch();
// Job chaining
Bus::chain([
new DownloadPodcast($url),
new ProcessAudio($podcast),
new PublishPodcast($podcast),
])->dispatch();Testowanie w Laravel
Testowanie demonstruje dojrzałość inżynierską. Laravel zapewnia bogate narzędzia testowe, a kandydaci powinni rozumieć testy jednostkowe, funkcjonalne i integracyjne.
P: Jaka jest różnica między testami Feature a Unit w Laravel?
Testy Unit testują izolowane klasy bez frameworka. Testy Feature testują całe żądania HTTP, rozwijając pełną aplikację Laravel.
class PricingServiceTest extends TestCase
{
public function test_calculates_discount_correctly(): void
{
$service = new PricingService();
$result = $service->calculateDiscount(100, 0.2);
$this->assertEquals(80, $result);
}
}
// tests/Feature/Http/Controllers/PostControllerTest.php
class PostControllerTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_create_post(): void
{
$user = User::factory()->create();
$response = $this->actingAs($user)
->post('/posts', [
'title' => 'Mój post',
'content' => 'Zawartość posta'
]);
$response->assertRedirect('/posts');
$this->assertDatabaseHas('posts', [
'title' => 'Mój post',
'user_id' => $user->id
]);
}
}P: Jak testować zadania kolejkowe?
use Illuminate\Support\Facades\Queue;
public function test_podcast_processing_job_is_dispatched(): void
{
Queue::fake();
$podcast = Podcast::factory()->create();
// Akcja wywołująca zadanie
$this->post("/podcasts/{$podcast->id}/process");
// Asercje
Queue::assertPushed(ProcessPodcast::class, function ($job) use ($podcast) {
return $job->podcast->id === $podcast->id;
});
Queue::assertPushedOn('audio', ProcessPodcast::class);
}Gotowy na rozmowy o Laravel?
Ćwicz z naszymi interaktywnymi symulatorami, flashcards i testami technicznymi.
Zaawansowane tematy architektoniczne
Stanowiska seniorskie wymagają wiedzy architektonicznej wykraczającej poza podstawy frameworka.
P: Kiedy używać wzorca Repository w Laravel?
Wzorzec Repository abstrahuje warstwę dostępu do danych. Warto go rozważyć, gdy aplikacja może zmienić bazę danych, wymaga złożonych zapytań w wielu miejscach lub potrzebuje łatwego mockowania w testach.
interface PostRepositoryInterface
{
public function findPublished(): Collection;
public function findByAuthor(User $author): Collection;
}
class EloquentPostRepository implements PostRepositoryInterface
{
public function findPublished(): Collection
{
return Post::where('status', 'published')
->with('author')
->orderByDesc('published_at')
->get();
}
public function findByAuthor(User $author): Collection
{
return Post::where('user_id', $author->id)
->with('tags')
->get();
}
}P: Wyjaśnij wzorzec Action w Laravel.
Action to pojedyncza klasa odpowiedzialna za jedno zadanie biznesowe. Zapewnia lepszą testowalność i wielokrotne użycie niż umieszczanie logiki w kontrolerach.
class CreateOrder
{
public function __construct(
private PaymentGateway $gateway,
private OrderRepository $orders
) {}
public function execute(User $user, Cart $cart): Order
{
$payment = $this->gateway->charge(
$user,
$cart->total()
);
$order = $this->orders->create([
'user_id' => $user->id,
'payment_id' => $payment->id,
'items' => $cart->items(),
'total' => $cart->total()
]);
OrderCreated::dispatch($order);
return $order;
}
}
// Użycie w kontrolerze
public function store(Request $request, CreateOrder $action)
{
$order = $action->execute(
$request->user(),
Cart::current()
);
return redirect()->route('orders.show', $order);
}Nowości Laravel 13
Rekruterzy często pytają o najnowsze funkcje, aby ocenić ciągłe uczenie się kandydata.
P: Jakie są kluczowe funkcje Laravel 13?
Laravel 13 wprowadza trzy główne nowości: AI SDK do integracji z modelami językowymi, pełne wsparcie PHP Attributes dla definicji tras i walidacji oraz natywne uwierzytelnianie Passkey.
// Integracja AI SDK
use Illuminate\AI\Facades\AI;
$response = AI::chat()
->model('gpt-4')
->system('Jesteś pomocnym asystentem.')
->user('Wyjaśnij Service Container w Laravel.')
->generate();
// PHP Attributes dla tras
#[Route('/posts', methods: ['GET'])]
#[Middleware('auth')]
public function index(): View
{
return view('posts.index');
}
// Walidacja z Attributes
#[Required]
#[Email]
#[Unique('users', 'email')]
public string $email;Pytania do przygotowania praktycznego
Podczas rozmów technicznych często pojawiają się zadania praktyczne. Oto przykłady typowych scenariuszy.
Scenariusz 1: Projektowanie systemu powiadomień
Zaprojektuj system obsługujący wiele kanałów powiadomień (e-mail, SMS, push) z możliwością konfiguracji przez użytkownika.
Scenariusz 2: Implementacja limitowania API
Zaimplementuj limitowanie żądań API z różnymi limitami dla różnych planów subskrypcji.
Scenariusz 3: Optymalizacja wolnych zapytań
Masz endpoint zwracający listę produktów z kategoriami, tagami i recenzjami. Czas odpowiedzi wynosi 3 sekundy. Jak go zoptymalizować?
Podsumowanie
Przygotowanie do rozmowy kwalifikacyjnej z PHP Laravel wymaga solidnej znajomości Eloquent ORM, Service Container, wzorców autoryzacji oraz praktyk testowania. Kandydaci powinni być przygotowani na demonstrację kodu i rozwiązywanie problemów architektonicznych. Znajomość nowości Laravel 13 pokazuje zaangażowanie w ciągły rozwój zawodowy. Praktyczne ćwiczenia z rzeczywistymi scenariuszami stanowią najlepsze przygotowanie do technicznej części rozmowy kwalifikacyjnej.
Znajdziesz błąd w Laravel?
Prawdziwy fragment kodu, ukryty błąd, jedna próba dziennie. Bez konta, żeby spróbować.

Autor:
Anthony Fillion-MailletZałożyciel SharpSkill
Programista fullstack od ponad 10 lat. Prowadzi SharpSkill i odpowiada za wszystko, co się tu ukazuje.
Zaktualizowano 7 września 2026
Tagi
Udostępnij
Powiązane artykuły

Laravel 12 w 2026 roku: Nowe funkcje, Starter Kity i pytania rekrutacyjne
Kompletny przewodnik po Laravel 12: przebudowane Starter Kity z React 19, Vue 3, Svelte 5 i Livewire 4, integracja WorkOS AuthKit, Carbon 3, sciezka migracji z Laravel 11 oraz kluczowe pytania rekrutacyjne na 2026 rok.

Rozwiązania Laravel: Zaawansowane Wzorce, Debugowanie i Pytania Rekrutacyjne 2026
Kompleksowy przewodnik po zaawansowanych wzorcach architektonicznych w Laravel, technikach debugowania z Telescope oraz najczęstszych pytaniach rekrutacyjnych dla programistów Laravel.

Testowanie Laravel z Pest 5 w 2026: TIA, Mocking i pytania rekrutacyjne
Opanuj najlepsze praktyki testowania Laravel z Pest 5, Test Impact Analysis, Mockery, facade fakes i testami architektonicznymi. Obejmuje testy jednostkowe, testy funkcjonalne, strategie mockowania i typowe pytania rekrutacyjne dla programistów Laravel.