Laravel: Sıfırdan İleri Seviye

Ders 2/17 35 dakika

Proje Yapısı ve Konfigürasyon

Laravel proje klasör yapısı, konfigürasyon dosyaları ve environment değişkenleri.

Laravel Proje Yapısı

Laravel projeleri belirli bir klasör yapısı izler. Bu yapıyı anlamak, framework'ü etkili kullanmak için çok önemlidir.

my-project/
├── app/                    # Uygulama kodu
│   ├── Console/           # Artisan komutları
│   ├── Exceptions/        # Exception handler'lar
│   ├── Http/              # HTTP katmanı
│   │   ├── Controllers/   # Controller sınıfları
│   │   ├── Middleware/    # Middleware sınıfları
│   │   └── Requests/      # Form Request sınıfları
│   ├── Models/            # Eloquent modeller
│   └── Providers/         # Service Provider'lar
│
├── bootstrap/             # Framework bootstrap
│   ├── app.php           # Application instance
│   └── cache/            # Optimizasyon cache'leri
│
├── config/                # Konfigürasyon dosyaları
│   ├── app.php           # Uygulama ayarları
│   ├── auth.php          # Authentication ayarları
│   ├── database.php      # Veritabanı ayarları
│   └── ...
│
├── database/              # Veritabanı dosyaları
│   ├── factories/        # Model factory'leri
│   ├── migrations/       # Migration dosyaları
│   └── seeders/          # Seeder sınıfları
│
├── public/                # Web erişilebilir dosyalar
│   ├── index.php         # Giriş noktası
│   ├── css/              # CSS dosyaları
│   ├── js/               # JavaScript dosyaları
│   └── storage/          # Storage symlink
│
├── resources/             # Kaynak dosyalar
│   ├── css/              # Sass/CSS kaynakları
│   ├── js/               # JavaScript kaynakları
│   └── views/            # Blade template'leri
│
├── routes/                # Route tanımları
│   ├── web.php           # Web route'ları
│   ├── api.php           # API route'ları
│   └── console.php       # Artisan komutları
│
├── storage/               # Uygulama storage
│   ├── app/              # Uygulama dosyaları
│   ├── framework/        # Framework cache
│   └── logs/             # Log dosyaları
│
├── tests/                 # Test dosyaları
│   ├── Feature/          # Feature testleri
│   └── Unit/             # Unit testleri
│
├── vendor/                # Composer paketleri
├── .env                   # Environment değişkenleri
├── .env.example           # Environment örneği
├── artisan                # Artisan CLI
├── composer.json          # Composer bağımlılıkları
└── package.json           # NPM bağımlılıkları

Önemli Klasörler

app/ - Uygulama Kodu

Tüm uygulama kodunuz burada bulunur. PSR-4 autoloading ile App namespace'i bu klasöre map edilir.

// app/Models/User.php
namespace App\Models;

class User extends Model
{
    // ...
}

config/ - Konfigürasyon

Tüm ayarlar burada bulunur. Her dosya bir array döner:

// config/app.php
return [
    'name' => env('APP_NAME', 'Laravel'),
    'env' => env('APP_ENV', 'production'),
    'debug' => (bool) env('APP_DEBUG', false),
    'url' => env('APP_URL', 'http://localhost'),
    'timezone' => 'Europe/Istanbul',
    'locale' => 'tr',
    // ...
];

routes/ - Route Tanımları

  • web.php: Session, CSRF koruması, cookie şifreleme middleware'leri aktif
  • api.php: Stateless, throttle middleware'i aktif, /api prefix'li
  • console.php: Closure-based Artisan komutları

Environment Değişkenleri (.env)

.env dosyası ortam bazlı değişkenleri saklar. Asla Git'e commit etmeyin!

APP_NAME="My Laravel App"
APP_ENV=local
APP_KEY=base64:xxxxx
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=secret

CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025

env() Helper

// .env'den değer okuma
$appName = env('APP_NAME');
$appName = env('APP_NAME', 'Default Name'); // Default değer

// Config üzerinden okuma (önerilen)
$appName = config('app.name');
⚠️ Önemli: Production'da env() fonksiyonu config dosyaları dışında kullanılmamalıdır. config:cache çalıştırıldığında env() çalışmaz.

Config Kullanımı

// Değer okuma
$timezone = config('app.timezone');
$default = config('app.nonexistent', 'default');

// Nested değer
$driver = config('database.connections.mysql.driver');

// Runtime'da değer set etme
config(['app.timezone' => 'UTC']);

// Tüm config'i al
$allConfig = config('app');

Custom Config Dosyası

// config/services.php
return [
    'stripe' => [
        'key' => env('STRIPE_KEY'),
        'secret' => env('STRIPE_SECRET'),
    ],
    'openai' => [
        'api_key' => env('OPENAI_API_KEY'),
        'model' => env('OPENAI_MODEL', 'gpt-4'),
    ],
];

// Kullanım
$stripeKey = config('services.stripe.key');

Cache Komutları

# Config cache (production için)
php artisan config:cache
php artisan config:clear

# Route cache
php artisan route:cache
php artisan route:clear

# View cache
php artisan view:cache
php artisan view:clear

# Tüm cache'leri temizle
php artisan optimize:clear

Önemli Noktalar

  • app/ klasörü uygulama kodunu içerir
  • config/ klasörü tüm ayarları barındırır
  • resources/ klasörü view ve asset dosyalarını içerir
  • .env dosyası ortam değişkenlerini saklar
  • config() helper ile ayarlara erişilir