On yıllık bir PHP uygulamasını devraldığınızda, genellikle stabilite ve teknik borç birlikte büyür. Bu, yüzlerce tarihi makale, birincil kaynak ve eğitim materyali içeren uzun süredir yayın yapan bir içerik sitesi olan Historical Text Archive (HTA) ile yaşadığımız durumdu.
Zamanla, orijinal kod tabanı bakımını zorlaştırdı, genişletilmesini zorlaştırdı ve modern araçlarla entegrasyonunu giderek daha zor hale getirdi.
Miras sistemi yamalamak yerine, mevcut veri yapısını ve arama motorlarının zaten güvendiği URL’leri koruyarak Laravel 12 kullanarak platformu modernize etmeye karar verdik.
HTA herkese açık olarak şu adreste bulunmaktadır:
https://historicaltextarchive.org
Göçün Hedefleri
Göçün Hedefleri
Aşağıdaki alanları geliştirmek istedik:
- bakım kolaylığı
- güvenlik
- arama işlevselliği
- genişletilebilirlik
- performans
- geliştirici deneyimi
Ayni zamanda şu durumları korumak gerekiyordu:
- mevcut URL’lerin bütünlüğü
- makale kimliklerinin istikrarlı kalması
- veritabanı yapısının anlaşılır olması
- SEO otoritesinin korunması
Miras PHP’nin Zorlukları
Miras PHP’nin Zorlukları
Orijinal uygulama 10 yıldan fazla bir süre önce prosedürel PHP ve bir MySQL veritabanı kullanılarak inşa edilmişti.
Karşılaştığımız yaygın sorunlar arasında:
- iş mantığı ve sunumun karışık olması
- sınırlı alanlar ayrımı
- her yerde manuel SQL sorguları
- tutarsız isimlendirme kuralları
- sınırlı test edilebilirlik
- yeni özelliklerin eklenmesini zorlaştırma
- daha eski kimlik doğrulama yaklaşımları
Tüm bu sınırlamalara rağmen, şemanın kendisi sağlamdı. Veritabanı yapısı iyi bir şekilde yaşlanmış, göç için uygun bir aday haline gelmişti.
Göç Stratejisi
Göç Stratejisi
Her şeyi aynı anda yeniden yazmak yerine, kademeli modernizasyona odaklandık.
Yüksek düzeyde yaklaşım:
- mevcut veritabanı şemasını dışa aktarma
- şemadan Laravel göç dosyaları oluşturma
- Eloquent modellerini oluşturma
- temel işlevselliği yeniden gerçekleştir
- rotaları ve URL’leri koruma
- modern özellikler ekleme
- arama yeteneklerini geliştirme
Bu yaklaşım riski azalttı ve uygulamanın geliştirme süresince işlevsel kalmasına izin verdi.
Adım 1: SQL Şemasını Laravel Göçlerine Dönüştürme
Adım 1: SQL Şemasını Laravel Göçlerine Dönüştürme
Miras uygulamadan bir schema.sql dump ile başladık.
Bundan yola çıkarak, yapıyı yeni bir veritabanında yeniden oluşturacak Laravel göç dosyaları ürettik.
Faydaları:
- versiyon kontrolü yapılmış şema
- gelecekteki geliştiriciler için daha kolay uyum sağlama
- ortamlar arasında tutarlı veritabanı yapısı
- geri alma yeteneği
Örnek göç:
Schema::create('articles', function (Blueprint $table) {
$table->increments('artid');
$table->integer('secid')->index();
$table->string('title');
$table->date('published')->nullable();
$table->text('body');
});
Adım 2: Eloquent Modellerini Oluşturma
Adım 2: Eloquent Modellerini Oluşturma
Migasyonlar tamamlandıktan sonra, her önemli tablo için Eloquent modelleri oluşturduk.
Örnek:
class Article extends Model
{
protected $primaryKey = ;
protected $fillable = [
,
,
,
];
public function section()
{
return $this->belongsTo(Section::class, );
}
}
Faydaları:
- yapılandırılmış ORM ilişkileri
- basitleşmiş sorgular
- yeniden kullanılabilir mantık
- daha kolay yeniden yapılandırma
Adım 3: SEO Dostu URL’lerin Korunması
Adım 3: SEO Dostu URL’lerin Korunması
En önemli gerekliliklerden biri arama motoru sıralamalarını korumaktı.
Birçok HTA makalesi yıllardır dizine alınmış durumda.
URL’lerin kırılması:
- arama görünürlüğünü azaltır
- geri bağlantıları kaybettirir
- kötü bir kullanıcı deneyimi yaratır
Mümkün olduğu kadar mevcut rotaları koruduk:
Route::get(, [ArticleController::class, ]);
Böylece kalıtsal URL’lerin çalışmaya devam etmesi sağlandı, yönlendirmelere ihtiyaç kalmadı.
Adım 4: Arama Alanını Geliştirme
Adım 4: Arama Alanını Geliştirme
Arama, herhangi bir arşiv için merkezi bir unsurdur.
Miras sistem basit SQL sorguları kullanıyordu, ancak sınırlıydı.
Laravel,:
- arama alanlarını genişletme
- filtre ekleme
- indeksleme mantığını oluşturma
- gelecek yapay zeka kategorilemesini destekleme
Örnek arama sorgusu:
Article::query()
->where(, , {$search})
->orWhere(, , {$search})
->paginate(20);
Gelecek geliştirmeler şunları içerebilir:
- tam metin indeklemeyi
- anlamlı arama
- etiket otomasyonu
- tarihsel konu kümeleri
Adım 5: Modern Geliştirme İş Akışı
Adım 5: Modern Geliştirme İş Akışı
Laravel, modern bir araç seti sunmaktadır:
- göçler
- artisan CLI
- blade şablonları
- doğrulama kuralları
- yönlendirme sistemi
- middleware
- kuyruk desteği
- test araçları
Örnek artisan kullanımı:
php artisan migrate
php artisan make:model Article
php artisan make:controller ArticleController
Geliştirme şimdi daha hızlı ve tutarlıdır.
Adım 6: Gelecek Özellikler için Hazırlık
Adım 6: Gelecek Özellikler için Hazırlık
Laravel ile HTA artık şu alanlarda genişleyebilir:
- bülten otomasyonu
- tarihsel olay keşfi
- gelişmiş makale kategorilendirme
- editoryal iş akışı iyileştirmeleri
- API uç noktaları
- AI destekli etiketleme
- gelişmiş arama yetenekleri
Temel yapı artık yapılandırıldığından, yeni özelliklerin uygulanması önemli ölçüde daha kolay.
Temel Çıkarımlar
Temel Çıkarımlar
Miras bir PHP uygulamasını taşımak, her şeyi terk etmek anlamına gelmez.
Birçok durumda:
- veritabanı tasarımı hala değerlidir
- içerik hala değerlidir
- alan otoritesi hala değerlidir
Laravel, mevcut işlevselliği kaybetmeden modernizasyon sağlamaktadır.
HTA için sonuç, tarihi derinliğini korurken modern esneklik kazanan bir platformdur.
Canlı Site
Canlı Site
https://historicaltextarchive.org
Eğer bir miras PHP uygulamasıyla çalışıyorsanız, şunlarla başlayın:
- veritabanı göçü
- model yapısı
- rota koruma
Modernizasyon, kullanıcıları rahatsız etmeden kademeli olarak gerçekleşebilir.
Bazen en iyi yükseltme, her şeyi değiştirmek değil, zaten mevcut olanın altında daha iyi bir temelin inşa edilmesidir.
Kaynak: Orijinal Makale
- Göçün Hedefleri
- Miras PHP’nin Zorlukları
- Göç Stratejisi
- Adım 1: SQL Şemasını Laravel Göçlerine Dönüştürme
- Adım 2: Eloquent Modellerini Oluşturma
- Adım 3: SEO Dostu URL’lerin Korunması
- Adım 4: Arama Alanını Geliştirme
- Adım 5: Modern Geliştirme İş Akışı
- Adım 6: Gelecek Özellikler için Hazırlık
- Temel Çıkarımlar
- Canlı Site


