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.

PHP Laravel Developer Interview Questions 2026

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.

Kluczowe obszary rozmowy kwalifikacyjnej

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().

app/Http/Controllers/PostController.phpphp
// 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.

RelacjaLokalizacja klucza obcegoPrzykład
hasOneW powiązanym modeluUser hasOne Profile (profiles.user_id)
hasManyW powiązanym modeluUser hasMany Posts (posts.user_id)
belongsToW bieżącym modeluPost belongsTo User (posts.user_id)
belongsToManyTabela pośredniaUser belongsToMany Roles (tabela role_user)

P: Jak obsługiwać soft deletes i jakie są tego konsekwencje?

app/Models/Post.phpphp
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.

app/Providers/AppServiceProvider.phpphp
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()?

MetodaZachowaniePrzypadek użycia
bind()Nowa instancja za każdym rozwiązaniemObiekty stanowe, żądania HTTP
singleton()Ta sama instancja w całej aplikacjiMenedżery cache, połączenia
instance()Wiązanie istniejącej instancjiTestowanie, 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ą.

app/Policies/PostPolicy.phpphp
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.

app/Providers/AppServiceProvider.phpphp
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.

app/Jobs/ProcessPodcast.phpphp
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.

php
// 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.

tests/Unit/Services/PricingServiceTest.phpphp
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?

php
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.

app/Repositories/PostRepository.phpphp
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.

app/Actions/CreateOrder.phpphp
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.

php
// 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.

Wyzwanie dnia

Znajdziesz błąd w Laravel?

Prawdziwy fragment kodu, ukryty błąd, jedna próba dziennie. Bez konta, żeby spróbować.

Anthony Fillion-Maillet

Autor:

Anthony Fillion-Maillet

Zał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

#laravel
#php
#interview
#career

Udostępnij

Powiązane artykuły