Laravel ve Symfony Projelerinde AI Kullanımı
Laravel ve Symfony projeleri, AI ajanlarının kullanımı için mükemmel alanlardır. PHP’nin “kolay” olmasından değil, PHP arka uçlarının gerçek iş mantığını taşımasından dolayı. Kontrolörler, servisler, konsol komutları, kuyruk işleri, Doctrine repository’ler, Eloquent modeller, etkinlik dinleyicileri, doğrulayıcılar, politikalar, migrations ve testler tek bir repository içinde var olur ve bunlar arasındaki ilişkiler, bir insanın öğrenmesi için pahalı, dikkatli bir ajanın haritalaması için ise ucuz olan bağlamlardır.
AJANDANIZDAN ALMAK İSTEDİĞİNİZ YARDIM
PHP kod tabanında bir ajanın en iyi kullanımı “rastgele kod üret” şeklinde değildir. Daha çok şöyle olmalıdır:
- Bu arka uç akışını anlamama yardım et.
- Davranışı korumama yardım et.
- Eksik testleri bulmama yardım et.
- Riskli sorguları gözden geçirmeme yardım et.
- Bu kodun ne yaptığını belgelememe yardım et.
ANALİZE ETMEKTE BAŞLAYIN, DÜZENLEMEKTE DEĞİL
İyi bir ajanın önce “bu kod ne yapıyor?” sorusunu yanıtlaması gerekir. Ardından “hangi kodu yazmalıyım?” sorusu gelmelidir. Bu sıralama, PHP’de, çoğu dilden daha önemlidir, çünkü Laravel ve Symfony, birçok davranışı facade’ler, servis konteynerleri ve etkinlik dinleyicileri arkasında gizler. Bir kontrolörü izole bir şekilde okumak, rota çalıştığında ne olduğuna dair hemen hemen hiçbir şey söylemez.
Aşağıdaki Laravel kontrolör örneğini inceleyelim:
final class SubscriptionController
{
public function cancel(Request $request, int $subscriptionId): JsonResponse
{
$subscription = Subscription::query()
->where('user_id', $request->user()->id)
->findOrFail($subscriptionId);
$this->subscriptionService->cancel($subscription, $request->boolean('immediately'));
return response()->json([
'status' => $subscription->status,
'ends_at' => $subscription->ends_at ? $subscription->ends_at->toISOString() : null,
]);
}
} Zayıf bir istemci “bu kontrolörü yeniden düzenle” olur. Bu, ajanın kodun sorumluluklarını anlamadan düzenleme modu içine girmesine neden olur.
Çok daha iyi bir başlangıç hareketi şöyle olmalıdır:
Analyze this Laravel controller and explain the backend flow.
Please identify:
- the HTTP entry point,
- request inputs,
- authorization assumptions,
- service calls,
- database reads/writes,
- events/jobs/emails that may happen downstream,
- response shape,
- behavior that should be protected by tests.
Do not edit code yet.LARAVEL AKIŞI: KONTROLÖRLER, SERVİSLER, İŞLER, KOMUTLAR
Laravel projeleri genellikle aynı özelliğe birkaç farklı giriş noktası ile sahiptir: routes/api.php, bir HTTP kontrolörü, bir Artisan komutu, her zaman çalışan bir komut, bir kuyruk işi, bir etkinlik dinleyicisi, bir webhook kontrolörü ve bir bildirim sınıfı. Aynı iş mantığı genellikle birden fazla yol üzerinden çalışır ve sürpriz hatalar tam olarak bu yolların ayrıldığı yerde ortaya çıkar.
Bu nedenle “her giriş noktasını bul” ajanın değerli bir sorusu haline gelir:
Find every entry point related to subscription cancellation.
Search for:
- routes,
- controllers,
- services,
- jobs,
- commands,
- event listeners,
- notifications,
- tests.
Group the results by execution path.
For each path, explain what triggers it and what side effects it may cause.Bu önemlidir çünkü yalnızca kontrolörü değiştirmek gerçek üretim yolunu değiştirmeyebilir. Örneğin:
final class CancelExpiredTrialsCommand extends Command
{
protected $signature = 'subscriptions:cancel-expired-trials';
public function handle(): int
{
Subscription::query()
->where('status', 'trialing')
->where('trial_ends_at', 'each(fn (Subscription $subscription) =>
$this->subscriptionService->cancel($subscription, immediately: true)
);
return self::SUCCESS;
}
}SENARYO BAZLI TESTLER ÜRETİMİ
AI hızlı bir şekilde test üretebilir, fakat hızlı olmak amaç değildir. Rastgele testler yeterli değildir. Davranış koruma testlerine ihtiyacınız vardır; bu testlerin, bir düzenleme yanlışlıkla bir yan etkiyi veya bir yanıt sözleşmesini değiştirdiğinde yüksek sesle başarısız olması gerekir.
public function test_user_can_cancel_own_subscription(): void
{
Queue::fake();
Mail::fake();
$user = User::factory()->create();
$subscription = Subscription::factory()->create([
'user_id' => $user->id,
'status' => 'active',
]);
$response = $this
->actingAs($user)
->postJson("/api/subscriptions/{$subscription->id}/cancel", [
'immediately' => true,
]);
$response
->assertOk()
->assertJsonStructure([
'status',
'ends_at',
]);
$this->assertDatabaseHas('subscriptions', [
'id' => $subscription->id,
'status' => 'canceled',
]);
}SONUÇ
İyi bir Laravel/Symfony iş akışında AI, “AI kod yazar, geliştirici umar ki çalışır” değil, daha çok:
- AI akışı haritalar.
- AI riskleri bulur.
- AI testler önerir.
- AI sorguları gözden geçirir.
- AI davranışı belgeler.
geliştirici değişiklikleri karar verir ve onaylar.
PHP projelerinde en değerli ajan, en çok kod yazan değil, daha az kodu daha güvenli bir şekilde değiştirmeye yardım edendir.
Kaynak: Orijinal Makale


