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 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.
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.
// 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şki | Yabancı Anahtar Konumu | Örnek |
|---|---|---|
| hasOne | İlişkili modelde | User hasOne Profile (profiles.user_id) |
| hasMany | İlişkili modelde | User hasMany Posts (posts.user_id) |
| belongsTo | Mevcut modelde | Post belongsTo User (posts.user_id) |
| belongsToMany | Pivot tablo | User belongsToMany Roles (role_user tablosu) |
S: Soft delete nasıl yönetilir ve sonuçları nelerdir?
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.
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?
| Metot | Davranış | Kullanım Senaryosu |
|---|---|---|
| bind() | Her çözümlemede yeni örnek | Durum tutan nesneler, HTTP istekleri |
| singleton() | Uygulama genelinde aynı örnek | Önbellek yöneticileri, bağlantılar |
| instance() | Mevcut bir örneği bağlama | Test, 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.
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.
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.
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.
// 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.
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?
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.
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.
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ı.
// 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.
Laravel kodundaki hatayı bulabilir misin?
Gerçek bir kod parçası, gizli bir hata, günde bir deneme. Denemek için hesap gerekmez.

Yazan:
Anthony Fillion-MailletSharpSkill 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
Paylaş
İlgili makaleler

Laravel 12 (2026): Yeni Özellikler, Starter Kit'ler ve Mülakat Soruları
Laravel 12, React 19, Vue 3, Livewire 4 ve WorkOS AuthKit ile tamamen yeniden tasarlanmış starter kit'ler sunuyor. 2026 yılı için yeni özellikler, yükseltme rehberi ve teknik mülakat soruları.

Laravel Çözümleri: Gelişmiş Desenler, Hata Ayıklama ve Mülakat Soruları 2026
Laravel'de gelişmiş mimari desenler, Telescope ile hata ayıklama teknikleri ve Laravel geliştiricileri için en sık sorulan mülakat sorularını kapsayan kapsamlı rehber.

Laravel Testing ile Pest 5 (2026): TIA, Mocking ve Mülakat Soruları
Pest 5, Test Impact Analysis, Mockery, facade fake'leri ve mimari testlerle Laravel test pratiklerinde ustalaşın. Unit testler, feature testler, mocking stratejileri ve Laravel geliştiricileri için yaygın mülakat soruları.