Readme.md made with (Yapay Zeka - AI)
Enterprise düzeyinde, çok dilli (multi-language) içerik yönetim sistemi. Laravel 12, güvenlik en iyi pratikleri ve modern web teknolojileri kullanılarak geliştirilmiş kapsamlı bir blog ve ürün yönetim platformudur.
Bu platform, hem blog içerikleri hem de ürün katalogları için tam kapsamlı çok dilli destek sunar. SEO odaklı, güvenlik öncellikli ve ölçeklenebilir mimari ile tasarlanmıştır. Hierarchical (hiyerarşik) kategori yapısı, gelişmiş slug yönetimi, rate limiting ve input sanitization gibi enterprise özelliklere sahiptir.
- Video Tanıtımı
- Temel Özellikler
- Teknolojiler
- Kurulum
- Proje Yapısı
- Veritabanı Şeması
- Multi-Language Yapısı
- Güvenlik Mimarisi
- Kullanım Kılavuzu
- Proje Görselleri
- Gelecek Özellikler
- Bilinen Sorunlar & Çözümler
- Katkıda Bulunma
- Lisans
-
📽️ Proje Tanıtım Videosu:
YouTube Video Linki -
⚙️ YouTube Demo Videosu (Zaman Damgalı):
YouTube Çalışma Videosu - Belirli Zaman Damgası
- ✅ Blog Sistemi: Tam özellikli çok dilli blog yazıları
- ✅ Ürün Katalog Sistemi: E-ticaret için ürün yönetimi
- ✅ Hierarchical Kategori Yapısı: Sınırsız seviye alt kategori desteği
- ✅ Etiket Sistemi: Blog ve ürünler için ortak etiket yönetimi
- ✅ Galeri Yönetimi: Çoklu resim yükleme ve sıralama
- ✅ Öne Çıkan İçerik: Featured flag ile özel içerikler
- ✅ Yayınlama Zamanlaması: Gelecek tarihli yayın desteği
- ✅ Dinamik Dil Yönetimi: Admin panel üzerinden dil ekleme/düzenleme
- ✅ Translation Tabloları: Her içerik türü için ayrı çeviri tabloları
- ✅ SEO Friendly URLs: Dil bazlı slug yapısı (
/tr/blog-yazisi,/en/blog-post) - ✅ Varsayılan Dil: Otomatik fallback desteği
- ✅ Dil Değiştirici: Aynı içeriğin farklı dilleri arasında geçiş
- ✅ Input Sanitization: SecurityHelper ile slug ve lang parametreleri temizleme
- ✅ SQL Injection Koruması: Parametrized queries ve input validation
- ✅ Mass Assignment Protection: $guarded kullanımı ile model koruması
- ✅ Rate Limiting: DoS saldırılarına karşı istek limitleri (60-120 req/min)
- ✅ Validation Middleware: Route seviyesinde parametre doğrulama
- ✅ XSS Prevention: HTML temizleme ve output encoding
- ✅ Status Control: Sadece aktif içeriklerin gösterilmesi
- ✅ Published Date Check: Yayın tarihine göre içerik kontrolü
- ✅ Slug Generation: Türkçe karakter desteği ile otomatik slug oluşturma
- ✅ Unique Slug Control: Veritabanı bazlı benzersizlik kontrolü
- ✅ WebP Image Conversion: Otomatik resim optimizasyonu
- ✅ Responsive Image Upload: Intervention Image ile resim işleme
- ✅ JSON Data Storage: Specifications, features, documents için JSON
- ✅ Cache Integration: Kategori ağacı ve sayaçlar için cache desteği
- ✅ Sitemap Generation: Otomatik XML sitemap oluşturma
- ✅ 404 Rate Limiting: 404 isteklerine özel rate limit
- ✅ Meta Tags: Her içerik için özel SEO title, description, keywords
- ✅ Clean URLs: SEO dostu URL yapısı
- ✅ Canonical URLs: Dil bazlı canonical tag desteği
- ✅ Sitemap.xml: Arama motorları için dinamik sitemap
- ✅ Alt Tags: Resimler için otomatik alt text
- ✅ Schema Markup: Yapılandırılmış veri desteği (hazır)
- ✅ Laravel Breeze: Kimlik doğrulama sistemi
- ✅ Admin Panel: Yönetici kontrolü
- ✅ User Roles: Yetki yönetimi alt yapısı
- ✅ Profile Management: Kullanıcı profil yönetimi
- Laravel 12: Modern PHP framework
- PHP 8.2+: Son PHP sürümü
- MySQL/MariaDB: İlişkisel veritabanı
- Blade Templates: Laravel template engine
- Tailwind CSS: Utility-first CSS framework
- Alpine.js: Minimal JavaScript framework
- Vite: Modern build tool
- Intervention Image 3.11: Resim işleme ve optimizasyon
- Laravel Breeze 2.3: Authentication scaffolding
- Laravel Debugbar 3.15: Development debugging
- Laravel Pint 1.13: Code style fixer
- SecurityHelper: Custom input sanitization
- Rate Limiting: İstek limitleme middleware
- CSRF Protection: Laravel built-in koruma
- Mass Assignment Protection: Model güvenliği
- PHP >= 8.2
- Composer
- Node.js & NPM
- MySQL/MariaDB
- GD Library veya Imagick (resim işleme için)
git clone https://github.com/malisahin89/laravel-multi-language-blog.git
cd laravel-multi-language-blogcomposer install
npm install
npm run buildcp .env.example .env
php artisan key:generate.env dosyasında aşağıdaki alanları kendi veritabanı bilgilerine göre doldur:
DB_DATABASE=veritabani_adi
DB_USERNAME=kullanici_adi
DB_PASSWORD=sifre
php artisan migrate:fresh --seedBu komut:
- Tüm tabloları oluşturur
- Örnek dilleri ekler (TR, EN)
- Admin kullanıcı oluşturur
- Örnek kategoriler ve etiketler ekler
php artisan storage:linkcomposer dump-autoload
php artisan optimize:clearTerminal'de iki ayrı pencere açın:
# Terminal 1 - Laravel Server
php artisan serve
# Terminal 2 - Vite Dev Server
npm run devAdmin Panel: http://localhost:8000/admin
Email: test@example.com
Password: 11223344
Frontend: http://localhost:8000
laravel-multi-language-blog/
├── app/
│ ├── Helpers/
│ │ ├── SecurityHelper.php # Input sanitization ve validation
│ │ ├── SlugHelper.php # Slug generation ve uniqueness
│ │ ├── ImageHelper.php # Resim işleme ve WebP dönüşümü
│ │ └── FileHelper.php # Dosya yükleme yardımcıları
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Contents/ # Admin CRUD controllers
│ │ │ │ ├── PostController.php
│ │ │ │ ├── ProductController.php
│ │ │ │ ├── CategoryController.php
│ │ │ │ └── TagController.php
│ │ │ └── Frontend/ # Public controllers
│ │ │ ├── HomeController.php
│ │ │ ├── PostController.php
│ │ │ ├── ProductController.php
│ │ │ ├── CategoryController.php
│ │ │ └── TagController.php
│ │ └── Middleware/
│ │ └── ValidateRouteParameters.php # Route validation
│ ├── Models/
│ │ ├── Post.php
│ │ ├── PostTranslation.php
│ │ ├── Product.php
│ │ ├── ProductTranslation.php
│ │ ├── Category.php
│ │ ├── CategoryTranslation.php
│ │ ├── Tag.php
│ │ ├── TagTranslation.php
│ │ ├── Language.php
│ │ └── User.php
│ └── Traits/
│ └── LanguageValidator.php # Dil doğrulama trait
├── database/
│ ├── migrations/ # Tüm veritabanı migration'ları
│ └── seeders/
│ └── DatabaseSeeder.php # Seed data
├── resources/
│ └── views/
│ ├── admin/ # Admin panel views
│ │ ├── posts/
│ │ ├── products/
│ │ ├── categories/
│ │ └── tags/
│ └── frontend/ # Public views
│ ├── home.blade.php
│ ├── post.blade.php
│ ├── products.blade.php
│ ├── product.blade.php
│ ├── category.blade.php
│ └── tag.blade.php
└── routes/
└── web.php # Tüm route tanımlamaları
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| name | varchar | Dil adı (Türkçe, English) |
| slug | varchar(2-5) | Dil kodu (tr, en, en-us) |
| flag | varchar | Bayrak emoji veya icon |
| status | tinyint(1) | Aktif/Pasif |
| is_default | boolean | Varsayılan dil |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| parent_id | int (FK → categories.id) | Üst kategori |
| level | int | Hiyerarşi seviyesi (0-N) |
| path | varchar | Kategori yolu (/1/3/7) |
| color | varchar | Kategori rengi |
| icon | varchar | Icon class/emoji |
| status | tinyint(1) | Aktif/Pasif |
| sort_order | int | Sıralama |
| created_at, updated_at | datetime |
Özellikler:
- Sınırsız seviye alt kategori
- Otomatik level ve path hesaplama
- Cache desteği
- Ancestor/Descendant metodları
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| category_id | int (FK → categories.id) | |
| language_slug | varchar | Dil kodu |
| name | varchar | Kategori adı |
| slug | varchar | URL slug |
| seo_title | varchar | SEO başlık |
| seo_description | text | SEO açıklama |
| seo_keywords | text | SEO anahtar kelimeler |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| color | varchar | Etiket rengi |
| status | tinyint(1) | Aktif/Pasif |
| usage_count | int | Kullanım sayısı |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| tag_id | int (FK → tags.id) | |
| language_slug | varchar | Dil kodu |
| name | varchar | Etiket adı |
| slug | varchar | URL slug |
| description | text | Açıklama |
| seo_title | varchar | SEO başlık |
| seo_description | text | SEO açıklama |
| seo_keywords | text | SEO anahtar kelimeler |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| user_id | int (FK → users.id) | Yazar |
| category_id | int (FK → categories.id) | Ana kategori |
| cover_image | varchar | Kapak resmi |
| gallery_images | json | Galeri resimleri |
| status | tinyint(1) | 0:draft, 1:published |
| is_featured | boolean | Öne çıkan |
| comment_enabled | boolean | Yorum açık/kapalı |
| view_count | int | Görüntülenme sayısı |
| order | int | Sıralama |
| published_at | datetime | Yayın tarihi |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| post_id | int (FK → posts.id) | |
| language_slug | varchar | Dil kodu |
| title | varchar | Başlık |
| slug | varchar | URL slug |
| short_description | text | Kısa açıklama |
| content | longtext | İçerik (HTML) |
| seo_title | varchar | SEO başlık |
| seo_description | text | SEO açıklama |
| seo_keywords | text | SEO anahtar kelimeler |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| order | int | Sıralama |
| cover_image | varchar | Kapak resmi |
| gallery_images | json | Galeri resimleri |
| is_featured | boolean | Öne çıkan ürün |
| status | tinyint(1) | Aktif/Pasif |
| brand | varchar | Marka |
| price | decimal(10,2) | Fiyat |
| model | varchar | Model kodu |
| specifications | json | Teknik özellikler |
| product_url | varchar | Dış link |
| published_at | datetime | Yayın tarihi |
| created_at, updated_at | datetime |
| Alan | Tip | Açıklama |
|---|---|---|
| id | int (PK) | |
| product_id | int (FK → products.id) | |
| language_slug | varchar | Dil kodu |
| title | varchar | Ürün adı |
| slug | varchar | URL slug |
| short_description | text | Kısa açıklama |
| content | longtext | Detaylı açıklama |
| features | json | Özellikler listesi |
| attributes | json | Nitelikler |
| documents | json | Dökümanlar/Kataloglar |
| seo_title | varchar | SEO başlık |
| seo_description | text | SEO açıklama |
| seo_keywords | text | SEO anahtar kelimeler |
| created_at, updated_at | datetime |
| Alan | Tip |
|---|---|
| post_id | int (FK → posts.id) |
| category_id | int (FK → categories.id) |
| Alan | Tip |
|---|---|
| post_id | int (FK → posts.id) |
| tag_id | int (FK → tags.id) |
| Alan | Tip |
|---|---|
| product_id | int (FK → products.id) |
| category_id | int (FK → categories.id) |
| Alan | Tip |
|---|---|
| product_id | int (FK → products.id) |
| tag_id | int (FK → tags.id) |
Users
└── Posts (1:N)
├── PostTranslations (1:N)
├── Categories (N:M via post_category)
└── Tags (N:M via post_tag)
Products
├── ProductTranslations (1:N)
├── Categories (N:M via product_category)
└── Tags (N:M via product_tag)
Categories (Hierarchical)
├── CategoryTranslations (1:N)
├── Parent (Self Reference)
└── Children (Self Reference)
Tags
└── TagTranslations (1:N)
Languages
├── PostTranslations (1:N)
├── ProductTranslations (1:N)
├── CategoryTranslations (1:N)
└── TagTranslations (1:N)
Platform, Translation Pattern kullanarak çok dilli içerik yönetimi sağlar:
- Ana Tablolar: Dil-bağımsız veriler (ID, status, timestamps, resimler)
- Translation Tabloları: Dil-bağımlı veriler (title, content, slug, SEO)
# Varsayılan dil (TR)
https://example.com/ → Ana sayfa
https://example.com/blog-yazisi → Blog yazısı
# Diğer diller
https://example.com/en/ → Ana sayfa (İngilizce)
https://example.com/en/blog-post → Blog yazısı (İngilizce)
https://example.com/de/blog-post → Blog yazısı (Almanca)
- Varsayılan Dilde Oluşturma: Her içerik önce varsayılan dilde oluşturulur
- Diğer Dillere Çeviri: Edit sayfasındaki dil butonları ile çeviri eklenir
- Slug Yönetimi: Her dil için otomatik benzersiz slug oluşturulur
// Post çekirisini alma
$post = Post::with(['translations' => function($q) use ($lang) {
$q->where('language_slug', $lang);
}])->find($id);
// Kategori hiyerarşisi
$category->getAncestors(); // Üst kategoriler
$category->getDescendants(); // Alt kategorilerKonum: app/Helpers/SecurityHelper.php
// Slug temizleme - sadece a-z, 0-9, hyphen
SecurityHelper::sanitizeSlug($slug);
// Örnek: "../../etc/passwd" → "etcpasswd"
// Language code temizleme
SecurityHelper::sanitizeLang($lang);
// Örnek: "tr'; DROP TABLE--" → "tr"
// Format validation
SecurityHelper::isValidSlug($slug); // ^[a-z0-9-]{1,255}$
SecurityHelper::isValidLang($lang); // ^[a-z]{2}(-[a-z]{2})?$Kullanım: Tüm frontend controller'larda otomatik
Konum: app/Http/Middleware/ValidateRouteParameters.php
// Route seviyesinde validation
'middleware' => ['validate.route']
// Kontroller:
- String type check
- Length validation (1-255 karakter)
- Format validation (regex)
- Sanitization checkRoute Uygulaması:
Route::group([
'middleware' => ['validate.route', 'throttle:60,1']
], function () {
// Tüm slug içeren route'lar korunuyor
});| Route Grubu | Limit | Açıklama |
|---|---|---|
| Frontend | 60 req/min | Blog, ürün, kategori sayfaları |
| Admin Panel | 120 req/min | Admin işlemleri |
| Sitemap | 30 req/min | XML sitemap |
| 404 Fallback | 10 req/min | Brute force koruması |
Aşım Durumunda: HTTP 429 Too Many Requests
Tüm modellerde $guarded kullanımı:
protected $guarded = [
'id',
'created_at',
'updated_at',
];Avantajları:
- Whitelist yerine blacklist (daha güvenli)
- Yeni alan eklemede otomatik koruma
- ID ve timestamp manipülasyonu engellendi
- Prepared Statements: Laravel Eloquent ORM otomatik kullanır
- SQL Injection: Parametrized queries ile korunuyor
- XSS Protection: Blade
{{ }}otomatik escape eder - CSRF Protection: Form'larda
@csrftoken zorunlu
// Frontend - sadece aktif içerikler
->where('status', 1)
// Yayın tarihi kontrolü
->where('published_at', '<=', now())
// Sadece owner düzenleyebilir (hazır alt yapı)
Gate::allows('update', $post);Admin → Languages → Create
- Name: Türkçe
- Slug: tr
- Flag: 🇹🇷
- Is Default: ✓
Admin → Categories → Create
- Parent Category: (üst kategori seçilebilir)
- Status: Active
- Her dil için çeviri eklenir
Admin → Posts → Create
1. Varsayılan dilde oluştur (TR)
2. Save
3. Edit → Dil butonlarıyla çeviri ekle
4. Her dil için:
- Title (otomatik slug)
- Content
- SEO fields
Admin → Products → Create
- Cover Image & Gallery
- Specifications (JSON): Teknik özellikler
- Features (JSON): Özellikler listesi
- Documents (JSON): PDF, katalog linkleri
- Categories & Tags (çoklu seçim)
/ veya /{lang} → Ana sayfa
/{lang}/blog/{slug} → Blog detay
/{lang}/products → Ürün listesi
/{lang}/product/{slug} → Ürün detay
/{lang}/category/{slug} → Kategori sayfası
/{lang}/tag/{slug} → Etiket sayfası
/sitemap.xml → Sitemap
@foreach($languages as $language)
<a href="/translator/{{ $language->slug }}/{{ base64_encode(request()->path()) }}">
{{ $language->flag }} {{ $language->name }}
</a>
@endforeach- Comment System: Blog yazıları için yorum sistemi
- Advanced Caching: Redis/Memcached entegrasyonu
- Search Functionality: ElasticSearch veya Meilisearch
- Media Manager: Gelişmiş medya yönetim sistemi
- User Roles & Permissions: Spatie Permission entegrasyonu
- API Support: RESTful API endpoints
- Analytics Dashboard: İstatistik ve raporlama
- Newsletter System: E-posta bülteni yönetimi
- Social Media Integration: Sosyal medya paylaşımı
- Content Versioning: İçerik versiyon kontrolü
# Tüm cache'leri temizle
php artisan optimize:clear# Route cache'i temizle
php artisan route:clear
php artisan config:clear# Storage link kontrol
php artisan storage:link
# Klasör izinleri (Linux/Mac)
chmod -R 775 storage
chmod -R 775 bootstrap/cache- Geliştirme sırasında
routes/web.phpiçindeki throttle değerlerini artırabilirsiniz - Örnek:
throttle:60,1→throttle:1000,1
Projeye katkıda bulunmak isterseniz:
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/YeniOzellik) - Değişikliklerinizi commit edin (
git commit -m 'Yeni özellik: ...') - Branch'inizi push edin (
git push origin feature/YeniOzellik) - Pull Request oluşturun
# Laravel Pint ile kod formatı
./vendor/bin/pint
# PHPStan ile statik analiz (opsiyonel)
./vendor/bin/phpstan analyseBu proje MIT Lisansı altında açık kaynaklıdır. Dilediğiniz gibi kullanabilir, değiştirebilir ve dağıtabilirsiniz.
Muhammet Ali ŞAHİN
Bu projeyi kullandığınız veya katkıda bulunduğunuz için teşekkür ederiz!
- Star ⭐ vermeyi unutmayın
- Sorun bildirmek için Issue açabilirsiniz
- Sorularınız için Discussions kullanabilirsiniz
Özellikler: Multi-Language, Blog, E-commerce, Security, SEO
Veritabanı: 13 Tablo | Hierarchical Categories | Translation Pattern
Güvenlik: Input Sanitization | Rate Limiting | Mass Assignment Protection | XSS & CSRF Protection
Made with ❤️ by Muhammet Ali ŞAHİN











