PHP Laravel Developer Mülakat Soruları 2026: Kapsamlı Hazırlık Rehberi

2026 yılında PHP Laravel geliştiricileri için teknik mülakat sorularına kapsamlı bir rehber. Eloquent ORM, Service Container, yetkilendirme, kuyruklar ve test stratejilerini kapsar.

PHP Laravel Developer Interview Questions 2026

PHP Laravel geliştirici mülakat soruları hem framework bilgisini hem de yazılım tasarım prensiplerini test eder. Mart 2026'da yayınlanan Laravel 13, AI SDK, PHP Attributes ve Passkey kimlik doğrulamasını tanıttı. Bu nedenle mülakatçılar, adayların hem güncel özellikleri hem de temel mekanizmaları bilmesini bekler.

Mülakat Odak Alanları

Laravel mülakatları genellikle beş temel konuyu kapsar: Eloquent ORM ilişkileri ve performans, Service Container ve bağımlılık enjeksiyonu, kimlik doğrulama ve yetkilendirme kalıpları, kuyruk ve iş yönetimi ile test stratejileri. Kıdemli pozisyonlar için mimari kararlar ve paket ekosistemi bilgisi de gereklidir.

Eloquent ORM ve Veritabanı Soruları

Eloquent, Laravel mülakatlarında en çok tartışılan konu olmaya devam ediyor. Mülakatçılar, adayların lazy loading ile eager loading arasındaki farkları, ilişki türlerini ve sorgu optimizasyonunu anlayıp anlamadığını değerlendirir.

S: N+1 sorgu problemi nedir ve Laravel bunu nasıl çözer?

N+1 problemi, kod bir koleksiyonu getirmek için bir sorgu yürüttüğünde ve ardından her öğe için ilişkili verileri yüklemek için N ek sorgu çalıştırdığında ortaya çıkar. Laravel, bu sorunu with() metodu ile eager loading kullanarak çözer.

app/Http/Controllers/PostController.phpphp
// N+1 problemi: postlar için 1 sorgu + yazarlar için N sorgu
$posts = Post::all();
foreach ($posts as $post) {
    echo $post->author->name; // Her post için bir sorgu tetikler
}

// Çözüm: with() ile Eager loading
$posts = Post::with('author')->get(); // Toplam 2 sorgu
foreach ($posts as $post) {
    echo $post->author->name; // Ek sorgu yok
}

Laravel 13, geliştirme ortamında katı modu korur. Bu mod, lazy loading gerçekleştiğinde bir istisna fırlatarak N+1 sorunlarını erken tespit etmeye yardımcı olur.

S: hasOne, hasMany, belongsTo ve belongsToMany arasındaki farkı açıklayın.

İlişkiYabancı Anahtar KonumuÖrnek
hasOneİlişkili modeldeUser hasOne Profile (profiles.user_id)
hasManyİlişkili modeldeUser hasMany Posts (posts.user_id)
belongsToMevcut modeldePost belongsTo User (posts.user_id)
belongsToManyPivot tabloUser belongsToMany Roles (role_user tablosu)

S: Soft delete nasıl yönetilir ve sonuçları nelerdir?

app/Models/Post.phpphp
use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes;
    
    // Soft-deleted kayıtlar varsayılan olarak hariç tutulur
    // Dahil etmek için:
    // Post::withTrashed()->get();
    // Yalnızca silinen kayıtları almak için:
    // Post::onlyTrashed()->get();
}

Soft delete, deleted_at sütunu ekler. Sorgular, açıkça istenmedikçe soft-deleted kayıtları otomatik olarak hariç tutar. Bu durum benzersizlik kısıtlamalarını etkiler ve optimum performans için deleted_at içeren bileşik indeksler gerektirir.

Service Container ve Bağımlılık Enjeksiyonu

Service Container, Laravel'in çekirdeğini oluşturur. Binding, çözümleme ve bağlamsal enjeksiyonu anlamak, junior ve senior geliştiricileri birbirinden ayırır.

S: Service Container nedir ve neden önemlidir?

Service Container, sınıf bağımlılıklarını yönetmek ve bağımlılık enjeksiyonu gerçekleştirmek için güçlü bir araçtır. PHP reflection kullanarak bağımlılıkları otomatik olarak çözer ve manuel örnekleme ihtiyacını ortadan kaldırır.

app/Providers/AppServiceProvider.phpphp
public function register(): void
{
    // Basit binding
    $this->app->bind(PaymentGateway::class, StripeGateway::class);
    
    // Singleton - her seferinde aynı örnek
    $this->app->singleton(CacheManager::class, function ($app) {
        return new CacheManager($app['config']['cache']);
    });
    
    // Bağlamsal binding
    $this->app->when(PhotoController::class)
              ->needs(Filesystem::class)
              ->give(function () {
                  return Storage::disk('photos');
              });
}

S: bind(), singleton() ve instance() arasındaki fark nedir?

MetotDavranışKullanım Senaryosu
bind()Her çözümlemede yeni örnekDurum tutan nesneler, HTTP istekleri
singleton()Uygulama genelinde aynı örnekÖnbellek yöneticileri, bağlantılar
instance()Mevcut bir örneği bağlamaTest, mock nesneler

Kimlik Doğrulama ve Yetkilendirme

Laravel 13, geleneksel kimlik doğrulama yöntemlerinin yanı sıra yerel Passkey desteği sunar. Adaylar hem yeni hem de klasik yaklaşımları anlamalıdır.

S: Laravel'de kimlik doğrulama ve yetkilendirme arasındaki farkı açıklayın.

Kimlik doğrulama, kullanıcının kimliğini doğrular (kim olduğu), yetkilendirme ise izinleri belirler (ne yapabilir). Laravel bu kavramları ayırır: Guard'lar kimlik doğrulamayı yönetirken, Gate'ler ve Policy'ler yetkilendirmeyi yönetir.

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');
    }
}

// Controller'da kullanım
public function update(Request $request, Post $post)
{
    $this->authorize('update', $post);
    // Güncelleme işlemine devam et...
}

S: Gate vs Policy ne zaman kullanılmalı?

Gate'ler, belirli modellerle ilişkili olmayan basit yetkilendirme kontrolleri için idealdir. Policy'ler, yetkilendirme mantığını modeller etrafında gruplandırarak CRUD işlemleri için daha temiz bir organizasyon sağlar.

app/Providers/AppServiceProvider.phpphp
Gate::define('access-admin', function (User $user) {
    return $user->is_admin || $user->hasRole('super-admin');
});

// Kullanım
if (Gate::allows('access-admin')) {
    // Yönetici panelini göster
}

Kuyruklar ve İş Yönetimi

Arka plan işleme, ölçeklenebilir uygulamalar için gereklidir. Mülakatçılar, kuyruk yapılandırması, hata yönetimi ve yeniden deneme kalıpları hakkındaki anlayışı test eder.

S: Laravel kuyrukları nasıl çalışır ve ne zaman kullanılmalı?

Kuyruklar, zaman alıcı görevleri sonraki işlemeye erteler. Tipik kullanım senaryoları arasında e-posta gönderme, görüntü işleme ve API çağrıları yer alır.

app/Jobs/ProcessPodcast.phpphp
class ProcessPodcast implements ShouldQueue
{
    use Queueable;
    
    public int $tries = 3;
    public int $backoff = 60; // denemeler arası saniye
    public int $timeout = 300; // maksimum çalışma süresi
    
    public function __construct(
        public Podcast $podcast
    ) {}
    
    public function handle(AudioProcessor $processor): void
    {
        $processor->process($this->podcast->audio_path);
    }
    
    public function failed(Throwable $exception): void
    {
        // Başarısızlık durumunda yöneticiyi bilgilendir
        Log::error('Podcast işleme başarısız', [
            'podcast_id' => $this->podcast->id,
            'error' => $exception->getMessage()
        ]);
    }
}

// İşi gönderme
ProcessPodcast::dispatch($podcast)->onQueue('audio');

S: Job batching ve job chaining kavramlarını açıklayın.

Job batching, birden fazla işi gruplar ve tamamlandığında geri çağrılar yürütür. Job chaining, işleri sırayla yürütür ve başarısızlıklarda durur.

php
// Job batching
Bus::batch([
    new ProcessPodcast($podcast1),
    new ProcessPodcast($podcast2),
    new ProcessPodcast($podcast3),
])->then(function (Batch $batch) {
    // Tüm işler başarıyla tamamlandı
})->catch(function (Batch $batch, Throwable $e) {
    // İlk başarısızlığı yönet
})->finally(function (Batch $batch) {
    // Batch tamamlandı (başarılı veya başarısız)
})->dispatch();

// Job chaining
Bus::chain([
    new DownloadPodcast($url),
    new ProcessAudio($podcast),
    new PublishPodcast($podcast),
])->dispatch();

Laravel'de Test

Test, mühendislik olgunluğunu gösterir. Laravel zengin test araçları sağlar ve adaylar birim, özellik ve entegrasyon testlerini anlamalıdır.

S: Laravel'de Feature ve Unit testleri arasındaki fark nedir?

Unit testler, framework olmadan izole sınıfları test eder. Feature testler, tam Laravel uygulamasını başlatarak HTTP isteklerinin tamamını test eder.

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' => 'Benim yazım',
                'content' => 'Yazı içeriği'
            ]);
        
        $response->assertRedirect('/posts');
        $this->assertDatabaseHas('posts', [
            'title' => 'Benim yazım',
            'user_id' => $user->id
        ]);
    }
}

S: Kuyruk işleri nasıl test edilir?

php
use Illuminate\Support\Facades\Queue;

public function test_podcast_processing_job_is_dispatched(): void
{
    Queue::fake();
    
    $podcast = Podcast::factory()->create();
    
    // İşi tetikleyen eylem
    $this->post("/podcasts/{$podcast->id}/process");
    
    // Doğrulamalar
    Queue::assertPushed(ProcessPodcast::class, function ($job) use ($podcast) {
        return $job->podcast->id === $podcast->id;
    });
    
    Queue::assertPushedOn('audio', ProcessPodcast::class);
}

Laravel mülakatlarında başarılı olmaya hazır mısın?

İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.

İleri Düzey Mimari Konular

Kıdemli pozisyonlar, framework temellerinin ötesinde mimari bilgi gerektirir.

S: Laravel'de Repository pattern ne zaman kullanılmalı?

Repository pattern, veri erişim katmanını soyutlar. Uygulama veritabanını değiştirebilecekse, birden fazla yerde karmaşık sorgular gerektiriyorsa veya testlerde kolay mock'lama gerekiyorsa kullanılması düşünülmelidir.

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();
    }
}

S: Laravel'de Action pattern'ı açıklayın.

Action, tek bir iş görevinden sorumlu tekil bir sınıftır. Mantığı controller'lara yerleştirmekten daha iyi test edilebilirlik ve yeniden kullanılabilirlik sağlar.

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;
    }
}

// Controller'da kullanım
public function store(Request $request, CreateOrder $action)
{
    $order = $action->execute(
        $request->user(),
        Cart::current()
    );
    
    return redirect()->route('orders.show', $order);
}

Laravel 13 Yenilikleri

Mülakatçılar, adayın sürekli öğrenme durumunu değerlendirmek için genellikle en son özellikler hakkında soru sorar.

S: Laravel 13'ün temel özellikleri nelerdir?

Laravel 13 üç ana yenilik sunar: dil modelleriyle entegrasyon için AI SDK, rota tanımları ve doğrulama için tam PHP Attributes desteği ve yerel Passkey kimlik doğrulaması.

php
// AI SDK entegrasyonu
use Illuminate\AI\Facades\AI;

$response = AI::chat()
    ->model('gpt-4')
    ->system('Yardımcı bir asistansınız.')
    ->user('Laravel Service Container nedir açıklayın.')
    ->generate();

// Rotalar için PHP Attributes
#[Route('/posts', methods: ['GET'])]
#[Middleware('auth')]
public function index(): View
{
    return view('posts.index');
}

// Attributes ile doğrulama
#[Required]
#[Email]
#[Unique('users', 'email')]
public string $email;

Pratik Hazırlık Soruları

Teknik mülakatlarda sıklıkla pratik görevler yer alır. İşte tipik senaryoların örnekleri.

Senaryo 1: Bildirim sistemi tasarımı

Birden fazla bildirim kanalını (e-posta, SMS, push) destekleyen ve kullanıcı tarafından yapılandırılabilir bir sistem tasarlayın.

Senaryo 2: API hız sınırlama uygulaması

Farklı abonelik planları için farklı limitlerle API istek hız sınırlaması uygulayın.

Senaryo 3: Yavaş sorgu optimizasyonu

Kategoriler, etiketler ve yorumlarla birlikte ürün listesi döndüren bir endpoint'iniz var. Yanıt süresi 3 saniye. Nasıl optimize edersiniz?

Sonuç

PHP Laravel mülakatına hazırlık, Eloquent ORM, Service Container, yetkilendirme kalıpları ve test uygulamalarının sağlam bir şekilde anlaşılmasını gerektirir. Adaylar, kod gösterimi ve mimari sorun çözmeye hazır olmalıdır. Laravel 13 yeniliklerini bilmek, sürekli profesyonel gelişime bağlılığı gösterir. Gerçek dünya senaryolarıyla pratik alıştırmalar, mülakatın teknik bölümüne en iyi hazırlığı sağlar.

Günün meydan okuması

Laravel kodundaki hatayı bulabilir misin?

Gerçek bir kod parçası, gizli bir hata, günde bir deneme. Denemek için hesap gerekmez.

Anthony Fillion-Maillet

Yazan:

Anthony Fillion-Maillet

SharpSkill kurucusu

10 yılı aşkın süredir fullstack geliştirici. SharpSkill’i yönetiyor ve burada yayımlanan her şeyden sorumlu.

7 Eylül 2026 tarihinde güncellendi

Etiketler

#laravel
#php
#interview
#career

Paylaş

İlgili makaleler