Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Geliştirici Günlüğü: 2026-06-25 — Her Yerde Sürücü Dikişleri, İzleme URL Hatası ve Veritabanı Tabanlı Ayarlar
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Geliştirici Günlüğü: 2026-06-25 — Her Yerde Sürücü Dikişleri, İzleme URL Hatası ve Veritabanı Tabanlı Ayarlar

Yazılım

Geliştirici Günlüğü: 2026-06-25 — Her Yerde Sürücü Dikişleri, İzleme URL Hatası ve Veritabanı Tabanlı Ayarlar

teknomers
Son güncelleme: 25 Haziran 2026 23:21
teknomers
Paylaş
Paylaş
<p>Geliştirme sürecinde önemli bir ders aldım: “Yüzeydeki çok sayıda benzer yapı, mimari tasarımın gerekliliğini gösterir.” Uygulamanızın mimarisini doğru yapılandırmak, ileride yapacağınız değişiklikleri kolaylaştırır. Bu yazıda, Laravel'de kullanılan bazı önemli yapıları ve en iyi uygulamaları ele alacağım: <strong>Store contract</strong> ve <strong>Eloquent</strong> sürücüsü ile ilgili deneyimlerim.</p>

<h2>
    <a name="thread-1-when-the-same-pattern-shows-up-50-times-its-an-architecture-not-a-coincidence" href="#thread-1-when-the-same-pattern-shows-up-50-times-its-an-architecture-not-a-coincidence">
    </a>
    Thread 1 — Aynı yapının 50 defa ortaya çıkması, mimari bir zorunluluk olduğunu gösterir
</h2>

<p>Geliştirdiğim gözlemleme platformu, hata ve ölçümleri çeşitli çalışma zamanlarından alıyor. Buradaki ilginç nokta, depolama ile ilgili endişelerin her birinin aynı şekilde çözümlenmiş olması: bir <strong>Store contract</strong> ve onun arkasında bir <strong>Eloquent driver</strong>. Her biri için ayrı bir seam oluşturuldu.</p>

<p>Yapı her zaman şöyle:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="kd">interface</span> <span class="nc">MetricStore</span>

{
public function record(MetricSample $sample): void;

<span class="cd">/  @return iterable<metricpoint> */</metricpoint></span>
<span class="k">public</span> <span class="k">function</span> <span class="n">series</span><span class="p">(</span><span class="kt">ProjectId</span> <span class="nv">$project</span><span class="p">,</span> <span class="kt">TimeRange</span> <span class="nv">$range</span><span class="p">):</span> <span class="kt">iterable</span><span class="p">;</span>

}

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="k">final</span> <span class="kd">class</span> <span class="nc">EloquentMetricStore</span> <span class="kd">implements</span> <span class="nc">MetricStore</span>

{
public function record(MetricSample $sample): void
{
Metric::create($sample->toAttributes());
}

<span class="k">public</span> <span class="k">function</span> <span class="n">series</span><span class="p">(</span><span class="kt">ProjectId</span> <span class="nv">$project</span><span class="p">,</span> <span class="kt">TimeRange</span> <span class="nv">$range</span><span class="p">):</span> <span class="kt">iterable</span>
<span class="p">{</span>
    <span class="k">return</span> <span class="nc">Metric</span><span class="o">::</span><span class="nf">query</span><span class="p">()</span>
        <span class="o">-&gt;</span><span class="nf">forProject</span><span class="p">(</span><span class="nv">$project</span><span class="p">)</span>
        <span class="o">-&gt;</span><span class="nf">whereBetween</span><span class="p">(</span><span class="s1">'recorded_at'</span><span class="p">,</span> <span class="nv">$range</span><span class="o">-&gt;</span><span class="nf">toBounds</span><span class="p">())</span>
        <span class="o">-&gt;</span><span class="nf">orderBy</span><span class="p">(</span><span class="s1>'recorded_at'</span><span class="p">)</span>
        <span class="o">-&gt;</span><span class="nf">cursor</span><span class="p">();</span>
<span class="p">}</span>

}

<p>Çağrılar — paneller, ingest pipeline, analitik sorgular — yalnızca arayüzle iletişim kurar. İlk sürücü Eloquent üzerinde Postgres kullanılıyor çünkü bu, güvenilir bir varsayılan seçenek. Ancak seam yapısı sayesinde, bir süre sonra yüksek yazım yolu (örneğin, web vitalleri) daha sonra bir sütun-store'a geçebiliriz; sadece yeni bir sürücü yazarak ve bunu bir servis sağlayıcısında yeniden bağlayarak. Bu, mevcut kodda tek bir değişiklik yapmadan gerçekleştirilebilir.</p>

<p>Önemli olan ders: İkinci sürücüyü ilk günden itibaren düşünmeye gerek yok. İlk günden ihtiyacınız olan şey, arayüzdür. İleride ikinci sürücüyü eklemek, yeni bir sınıf ekleyerek yapılır; bu, mevcut kod ile yapı değişikliğine neden olur. Seam'in maliyeti bir dosya; bunun olmaması durumunda, her biri için yeniden kod yazmanız gerekebilir.</p>

<p>Proje genelinde işe yarayan birkaç ek alışkanlık:</p>
<ul>
    <li>
        <strong>İkili tanımlayıcılar</strong> — içsel birleşimler için otomatik artan kimlik, sınırları geçen her şey için UUID (URL'ler, API yükleri, veri paketi). Dahili kimlik hızlı kalır; genel kimlik asla satır sayısını sızdırmaz.
    </li>
    <li>
        <strong>Enums, kelime dağarcığı</strong> — roller, şiddetler ve durumlar, PHP enum'larda <code>label()</code>/<code>color()</code> yardımcıları ile yer alır, böylece kullanıcı arayüzü ve yetkilendirme kontrolleri aynı gerçeklik kaynağından okunur.
    </li>
    <li>
        <strong>Versiyonlu iletişim sözleşmesi</strong> — her istemcinin gönderdiği yük şekli, bir şemaya ve bir sürüm alanına bağlıdır, böylece daha zengin bir v1.1 paketi yeni alanları <em>ekleyici</em> şekilde ekleyebilir, eski göndericileri kırmadan. Ekleyici olan her şey disiplini sağlar: yeni opsiyonel alanlar serbesttir, yeniden adlandırılmış ya da kaldırılmış alanlar kırıcı bir değişikliktir.
    </li>
</ul>

<p>Detaylı mimari yazım için lütfen ilgili gönderide daha fazlasını okuyun.</p>

<h2>
    <a name="thread-2-a-trackinglink-rewrite-that-quietly-broke-signed-urls" href="#thread-2-a-trackinglink-rewrite-that-quietly-broke-signed-urls">
    </a>
    Thread 2 — Tracking-link yeniden yazımı, imzalı URL’leri gizlice kırdı
</h2>

<p>Daha küçük, keskin bir hata. Kendinize ait bir e-posta açma/tıklama izleme paketi, çıkan her <code><a href=""/></code> linkini yeniden yazarak tıklamaları önce bir yönlendirme ile yönlendiriyor. Yönlendirme, orijinal URL'yi şifreliyor ve çıkışta geri yüklüyor.</p>

<p>Tuzağa düşen kısım: <code>href</code> okunduğunda, Laravel’in mail şablonları, onu HTML ile kaçırıyor. Bir imzalı URL, <code>?expires=...&amp;signature=...</code> olarak geliyor ve bu şifrelenip yönlendirmede kullanılırsa, <code>&amp;</code> yani ampersand aynı kalıyor ve Laravel'in imza doğrulaması, imzalanmış olan query string ile farklı bir query string görüyor. Bu nedenle bağlantı 404 oluyor veya doğrulama hatası alıyor, ama bu yalnızca imzalı URL'ler için geçerli (e-postayı doğrulama, imzalı indirme...). Normal bağlantılar düzgün görünüyor, bu yüzden bu hata gizli kalıyor.</p>

<p>Düzeltme, bir satır: <code>html_entity_decode</code> fonksiyonunu kullanarak URL'yi yakalamadan önce kodları çözmek:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="nv">$originalUrl</span> <span class="o">=</span> <span class="nb">html_entity_decode</span><span class="p">(</span><span class="nv">$matches</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="no">ENT_QUOTES</span> <span class="o">|</span> <span class="no">ENT_HTML5</span><span class="p">);</span>

<p>İlgili yazıda tam yeniden yazım özellikleri ve gerekli testler daha ayrıntılı olarak sunulmaktadır.</p>

<h2>
    <a name="thread-3-admineditable-settings-without-giving-up-raw-config-endraw-" href="#thread-3-admineditable-settings-without-giving-up-raw-config-endraw-">
    </a>
    Thread 3 — Yönetici düzeni ayarları, <code>config()</code> işlevinden vazgeçmeden
</h2>

<p>Bir başlangıç kitine eklenen küçük ama gerçekten faydalı bir özellik: bir yönetici, genel kayıt açma anahtarını ve uygulama zaman dilimini bir ayar ekranından değiştirerek, bu değişikliklerin veritabanında saklanabilmesi — uygulamanın geri kalan kısmı ise hala <code>config('app.timezone')</code> ve <code>config('admin.public_registration')</code> ile erişim sağlayabilmektedir.</p>

<p>Buradaki model, <code>AppServiceProvider::boot()</code> fonksiyonundadır: Veritabanında saklanan ayarları okuyarak, bunları mevcut <code>config()</code> ayarları üzerine eklemek ve (zaman dilimi için) <code>date_default_timezone_set()</code> fonksiyonunu da çağırmak, çünkü <code>config()</code> framework başlangıcında varsayılan ayarı belirlediğinde bunu tekrar uygulamaz. Kayıt açma anahtarı kapalıyken, Fortify'nin kayıt açma özelliğini aslında <em>kaldırdığı</em> etkileyici bir özelliktir; böylece yönlendirme artık yalnızca gizlenmez, yok olur. İlgili gönderi, overlay ve başlangıç sırası ile ilgili konuları detaylandırmaktadır.</p>

<h2>
    <a name="the-throughline" href="#the-throughline">
    </a>
    Ana Başlık
</h2>

<p>Üç konunun tamamı, farklı ölçeklerde aynı içgüdüdür: <strong>seam'in nereye gideceğine karar verin.</strong> Platformunuz ile depolama arasına, işlenmiş bir bağlantı ile şifrelediğiniz baytlar arasına ve saklanan bir ayar ile uygulamanın okuduğu konfigürasyon arasına. Doğru sınırı bir kez koyun ve her şey kolay kalır.</p>

Kaynak: Orijinal Makale

Gizli Mimari Tuzağı: Laravel’in Etiketli Ön Belleği ve JWT Neden Bir Güvenlik Zaman Bombasıdır
Sage, perakende yönetim şirketi Brightpearl’ı 225 milyon £ karşılığında satın aldı
Veritabanı Kilitlenmelerini Çözme: Laravel’de Transaction Yenilemeleri
WPBones v2 — Webpack Sürümü
Laravel’da API Yanıtlarını Standartlaştırma (Temiz JSON Yanıt Yapısı)
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale PC RAM Teknolojisinde Yüksek Fiyat Seviyesi Uzun Süre Devam Edebilir
Sonraki Makale En Uygun Fiyata 8TB Gen4 SSD: WD SN850X’te Büyük İndirim!

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Onsemi, nakit sıkıntısı çeken Synaptics’i 7 milyar dolara satın aldı
Donanım
Aave ve Solana Fiyat Artışında Lider, Bitcoin 60 Bin Dolar Etrafında Dengelendi
Finans
Trump Yönetimi, Anthropic’in Mythos Modeline Erişimi Artırdı!
Genel
Anthropic’in Mythos 5’i Geri Döndü
Liste
Trump Yönetimi, 100’den fazla ABD şirketine Anthropic Mythos’u sundu
Yapay Zeka
Asus ROG Zephyrus G16: 240Hz OLED, 16 çekirdekli CPU, 1,575 $
Donanım
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?