Çoğu zaman, Ruby on Rails ile PHP’nin tamamen farklı gezegenlerden geldiğini düşünen geliştiricilerle konuştuğumu görüyorum.
Ancak bir Rails geliştiricisi olarak, Laravel‘a yakından baktığınızda bazı benzerliklerin farkına varacaksınız. Laravel’ın yaratıcısı Taylor Otwell, Ruby on Rails’tan büyük ölçüde esinlendiğini kabul ediyor.
Laravel, PHP dünyasının Rails’idir. Aynı MVC yapısına, veritabanı için aynı aktif kayıt modeline ve “Geliştirici Memnuniyeti”ne odaklanmaktadır.
Laravel kod tabanı üzerinde çalışmanız gerektiğinde veya sadece diğer tarafı merak ediyorsanız, her şeyi baştan öğrenmek zorunda değilsiniz. Sadece bir çeviri kılavuzuna ihtiyacınız var.
İşte Laravel kavramlarının Rails düşüncenizle nasıl örtüştüğüne dair ayrıntılar.
KAVRAM 1: CLI (Artisan vs Rails)
KAVRAM 1: CLI (Artisan vs Rails)
Rails’de her şeyi bin/rails komutu ile yaparsınız. Modeller oluşturur, migration’lar çalıştırır ve konsolu açarsınız.
Laravel’de komut satırı aracı Artisan olarak adlandırılır.
- Sunucuyu başlat:
- Rails:
rails server - Laravel:
php artisan serve
- Rails:
- Konsolu aç:
- Rails:
rails console - Laravel:
php artisan tinker(Tinker, PsySH üzerine inşa edilmiş harika bir REPL’dir)
- Rails:
- Migration’ları çalıştır:
- Rails:
rails db:migrate - Laravel:
php artisan migrate
- Rails:
Bir modeli ve migration’ı aynı anda oluşturduğunuzda, Laravel’de harika bir kısayol bayrağı (-m) bulunmaktadır:
# Rails
rails generate model Post title:string body:text
# Laravel
php artisan make:model Post -m
Not: Laravel, komut satırından varsayılan olarak tablo sütunlarını oluşturmaz. Oluşturulan migration dosyanızı açar ve bunları PHP ile yazarsınız.
KAVRAM 2: Bağımlılık Yönetimi (Composer)
KAVRAM 2: Bağımlılık Yönetimi (Composer)
Ruby’de Bundler ve bir Gemfile kullanırız.
PHP’de standart paket yöneticisi Composer‘dır ve dosya composer.json olarak adlandırılır.
# Rails: Gemfile
gem 'stripe'
// Laravel: composer.json
"require": {
"stripe/stripe-php": "^10.0"
}
Paketleri yüklemek için bundle install yerine composer install çalıştırırsınız. Bu kadar basit.
KAVRAM 3: ORM (Eloquent vs ActiveRecord)
KAVRAM 3: ORM (Eloquent vs ActiveRecord)
Burada kendinizi en çok evinizde hissedeceksiniz. Laravel, Rails ile aynı Active Record tasarım desenini kullanan bir ORM olan Eloquent‘i kullanır.
Modelleriniz app/Models/ dizininde bulunur (yerine app/models/). Veritabanına sorgulama yapmak neredeyse tam olarak benzer; sadece PHP sözdizimi ile (noktalardan . yerine oklar -> ve satır sonlarında noktalı virgüller kullanarak).
# Rails
@users = User.where(active: true).order(created_at: :desc).limit(10)
@user = User.find(1)
// Laravel
$users = User::where('active', 1)->orderBy('created_at', 'desc')->take(10)->get();
$user = User::find(1);
İlişkiler de çok benzer. has_many gibi makrolar yerine, ilişkileri döndüren bir yöntem tanımlarsınız:
// Laravel: app/Models/User.php
class User extends Model
{
public function posts()
{
return $this->hasMany(Post::class);
}
}
KAVRAM 4: Routing ve Controller’lar
KAVRAM 4: Routing ve Controller’lar
Rails’de tüm rotalarınız config/routes.rb dosyasında toplanır.
Laravel’de bunlar ayrı ayrı düzenlenir. Web rotaları (oturum ve CSRF korumasına sahip olanlar) routes/web.php‘da bulunur. API rotaları ise routes/api.php‘da yer alır.
# Rails: config/routes.rb
get "https://dev.to/about", to: 'pages#about'
resources :posts
// Laravel: routes/web.php
Route::get("https://dev.to/about", [PagesController::class, 'about']);
Route::resource('posts', PostController::class);
Controller’lar, pratiğe benzer şekilde çalışır. Bir isteği alır, Model’den veri ister ve bir görünüm döner.
KAVRAM 5: Görünümler (Blade vs ERB)
KAVRAM 5: Görünümler (Blade vs ERB)
Rails’de, Ruby’yi HTML’ye entegre etmek için ERB (.html.erb) kullanırız.
Laravel ise, Blade adında bir şablon motoru kullanır (.blade.php).
Aslında, Blade harika. ERB’ye göre daha temiz çünkü her yerde <% %> yazmanıza gerek kalmıyor. Mantık için @ sembolünü ve değişkenleri çıkartmak için çifte süslü parantezleri {{ }} kullanıyorsunuz.
if @user.is_admin? %>
Welcome, @user.name %>
else %>
Access Denied
end %>
@if ($user->is_admin)
Welcome, {{ $user->name }}
@else
Access Denied
@endif
KAVRAM 6: Ön Yüz (Livewire vs Hotwire)
KAVRAM 6: Ön Yüz (Livewire vs Hotwire)
Rails 8, React yazmadan hızlı, SPA benzeri bir his vermek için Hotwire (Turbo ve Stimulus) kullanır.
Laravel’de bunun karşılığı Livewire‘dır.
Hotwire, standart form gönderimlerini kesintiye uğratarak HTML gönderirken, Livewire PHP bileşen sınıflarını doğrudan HTML’nize bağlar. Bir kullanıcı bir düğmeye tıkladığında, Livewire bir AJAX isteği yapar, PHP yöntemini çalıştırır ve DOM’u otomatik olarak şekillendirir.
Her ikisi de aynı amaca ulaşmaktadır: arka uç geliştiricilerin büyük bir Javascript derleme adımı olmadan son derece etkileşimli ön yüzler oluşturmasına olanak sağlamak.
Özet
Özet
Eğer Ruby on Rails biliyorsanız, Laravel’in %80’ini zaten biliyorsunuz. Tek yapmanız gereken PHP sözdizimine alışmak ve satır sonlarında noktalı virgül eklemektir.
-
Gemfile=composer.json -
bin/rails=php artisan -
ActiveRecord=Eloquent -
ERB=Blade -
Hotwire=Livewire
Laravel, muazzam bir ekosisteme sahip (dağıtım için Forge, yönetim panelleri için Nova). Kalbim hala Ruby’ye ait olsa da, Laravel’e büyük bir saygım var. “Majestic Monolith”ın yazılım geliştirmek için en iyi yol olduğunu kanıtlıyor, hangi dilde yazdığınız önemli değil.
Kaynak: Orijinal Makale


