Laravel’de projede tanımlı ENV değerlerine erişme

Projelerimizde çoğu zaman çeşitli config tanımlamaları yapmamız gerekiyor. En basitinden, local development ortamımızda veritabanı ayarlarımız farklı iken, sunucuda farklı olabilir. Bu farklılıkları tanımlamak için farklı farklı yöntemler vardır. Her bir ortam için özel dosya oluşturmak, bilgisayarın ENV değelerini kullanmak, herkesi aynı değişken değerlerini kullanmaya zorlamak 🙂 gibi. Laravel, proje özelindeki değişkenlerin tanımı için vlucas/phpdotenv paketini kullanmaktadır. Symfony Framework’de 3.4 versiyonu ile birlikte .env kullanımına başladı. Biz .env yaklaşamını oldukça beğeniyoruz açıkçası.

.env dosyasında tanımlı değerlerin proje içerisinde kullanımına dair sıkça yapılan bir hata var. Bu yazımızda özellikle bunu paylaşmak istedik. vlucas/phpdotenv paketi sayesinde, .env dosyasında tanımlı bir değere env(‘CONFIG_KEY’) şeklinde ulaşabilirsiniz. Oldukça pratik. Hem sunucu bazlı değişkenleri kontrol ediyor, hem de .env dosyanıza bakıyor ve ona göre bir değer döndürüyor. Fakat Laravel’de, eğer production ortamında config dosyanızı cacheliyorsanız (php artisan config:cache) -ki şiddetle tavsiye ederiz-, artık .env dosyanızda tanımlı değişkenlere `env(‘’), methodu ile erişemezsiniz.

Bunun için yapmanız gereken tek şey, env değerlerinizi config dosyalarında tanımlamak ve config() üzerinden kullanmak. Diyelim ki .env dosyanızda bir config değeriniz var.

ANALYTICS_ID=degisken

Bu değeri, config dosyası üzerinde kullanabilirsiniz. Bunun için istediğiniz config dosyasını kullanabileceğiniz gibi, yeni bir dosya da ekleyebilirsiniz. Örneğin, config/site.php diye bir dosya ekleyelim.


<?php //config/site.php return [ ‘analytics_id’ => env(‘ANALYTICS_ID’), ];

şeklinde dosyayı tanımladığınızda, bu değere config(‘site.analytics_id’) şeklinde erişebilirsiniz. Bu sayede, config cache’i yaptığınızda da env değelerinize erişebilirsiniz.

Laravel için docker ortamı: Vessel

Çoğu geliştirici, Laravel için oluşturulmuş “Homestead” vagrant kutusunu tercih etmekte. Ancak vagrant’ı tercih eden kişi sayısında ciddi bir düşüş yaşanıyor. Vagrant ilk çıktığı yıllarda oldukça pratik ve neredeyse alternatifsiz iken, artık çok çeşitli ve pratik geliştirme ortamları mevcut. Docker, bunların başında geliyor. Adını sıkça duyduğunu fakat bir türlü başlayamadığınız ya da denemelerinizin yarım kaldığını tahmin edebiliyoruz.

Tıpkı Homestead ya da Valet gibi, Vessel’de oldukça pratik bir biçimde Docker ile Laravel çalışma ortamınızı hazırlıyor. Detaylar şurada: https://vessel.shippingdocker.com/

Eğer daha önce Docker kullanmadıysanız, Docker ortamına giriş yapmanız için bu paket tam size göre olabilir. Kurulumu ve kullanımı oldukça basit. Detaylar için Vessel’in sayfasına göz gezdirmeyi unutmayın.

Laravel’i PHPStorm ile etkin kullanmak.

Özellikle büyük frameworklerle çalışırken, IDE (integrated development environment)’ler bizler için çok büyük yardımcı oluyorlar. Şüphesiz PHPStorm, en iyi IDE’ler arasında aday gösterilebilecek nitelikte. Tek kusuru paralı olması diyebiliriz ki bu parayı da hakediyorlar 🙂

Ancak IDE’ler tüm frameworklere %100 uyumlu olmayabiliyorlar. Bu noktada da ide eklentileri yardımımıza koşuyor. Laravel için kullandığımız iki eklenti var. Birisi IDE seviyesindeyken birisi de framework seviyesinde.

1- PHPStorm Laravel Eklentisi

https://plugins.jetbrains.com/plugin/7532-laravel-plugin

Bu eklenti Laravel ile PHPStorm arasındaki uyum sorunlarını ortadan kaldırıyor. Bununla birlikte, bir çok kolaylık getiriyor. Örneğin route isimlerini bu eklenti sayesinde otomatik tamamlayabiliyorsunuz. Ya da config key’lerini otomatik tamamlayabiliyorsunuz. Ve bunun gibi bir sürü özellik! Eğer Laravel ile kodlama yapıyorsanız, bu eklentiyi mutlaka kullanmalısınız. Mutlu Laravel kodlamalar 🙂

2- Laravel Ide-Helper paketi

https://github.com/barryvdh/laravel-ide-helper

Eloquent, active record kullanan bir ORM. Bu yüzden, model dosyalarınız içerisinde tek tek veritabanı kolonlarını tanımlamanıza gerek yok, bildiğiniz gibi. $model-&gt;column şeklinde kullandığınızda, Eloquent sizin için veritabanındaki column değerini döndürecek ya da hata verecektir veriye erişemediği için. Bu kolon tanımları model dosyanızda olmadığı için doğal olarak IDEniz otomatik tamamlama yapamaz. Ama ide-helper paketi sayesinde, Ide’niz veritabanı şemanızı tanır hale gelir.

Bunun yanında ide-helper paketi, Laravel eklentisinin yapamadığı/bilemediği şeyleri PHPStorm’a öğreten sağlayan bir dosya üretir. Örneğin kendi insiyatifinizle yüklediğiniz bir paketi Laravel PHPstorm eklentisi bilemezken, ide-helper paketinin ürettiği dosya sayesinde öğrenebilir.

Laravel’de veritabanına JSON kaydetme ve array olarak erişmenin kolay yolu

Zaman zaman veritabanına Json kaydetmemiz gerekebilir. Bu gibi durumlarda veritabanına kaydetmeden önce verimizi json_encode ile json’a çevirip; erişirken de json_decode ile tekrar arraye çevirmemiz gerekiyor. Fakat Laravel’de bunun için kısa bir yöntem var.

Dökümanda “Array & Json Casting” (https://laravel.com/docs/5.5/eloquent-mutators#array-and-json-casting) bölümünde de belirtildiği gibi, Model dosyanıza yoksa protected $casts değişkeni ekleyerek, veri alanınızın json olduğunu belirtmeniz yeterli.


<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'options' => 'array', ]; }

Kullanımı ise oldukça pratik ve json_encode json_decode methodlarına ihtiyaç duyulmuyor.

 


$user->options = [‘a’ => ‘b’]; $user->save();   echo $user->options[‘a’]; //b

Yukarıda gördüğünüz gibi, veriyi kaydederken array olarak kaydediyorsunuz. Erişirken de array olarak erişiyorsunuz. Aradaki işlemleri Eloquent sizin için tamamlıyor.

Laravel’de hata takibini daha kolay yapabilmenizi sağlayan kütüphaneler

Hata takibi yapmak, exception’ları yakalamak ve hızlıca müdahale edebilmek uygulamalarımız için kritik önem taşıyor. Her ne kadar yazdığımız unit-functional testlerle hata oranını düşürmeye çalışsak ta, öngöremediğimiz hatalar her zaman ortaya çıkabiliyor. İşte bu durumlarda çeşitli araçlar yardımı ile hata oluştuğu anda tespit edip, detaylarını öğrenip, müdahale ediyoruz.

Laravel Logs Viewer

https://github.com/rap2hpoutre/laravel-log-viewer adresinde ikamet eden kütüphanemiz ile sistemimizdeki log kayıtlarını web üzerinden görebiliyoruz. Her bir log kaydını satır satır sunuyor ve kayıtlar arasında arama imkanı veriyor. Aslında tam bir hata takibi aracı değil, ama yine de bazı durumlarda kullanılabiliyor. Burada bulunabileceğini düşündük.

Ancak logların dışarıya açık olması, bir şekilde erişilebilir olması oldukça tehlikeli bir durum. Logları okuduğunuz sayfa öncesi bir yetkilendirme ekleyebilirsiniz. Yine de en güvenlisi terminal ile sunucunuza erişip logları okumanız ve kontrol etmeniz.

Bugsnag

 

Bugsnag (http://bugsnag.com/), sistemde oluşan hataları anlık olarak yakalar ve size bildirim ile ulaştırır. Bugsnag, standart bir logun yanında çok daha detaylı bilgiler verir. Örneğin kullanıcının tarayıcı bilgilerine, cookie bilgilerine, hangi kullanıcının login olduğuna vs gibi bir çok bilgiye ulaşabilirsiniz. Sistemde bir hata oluştuğunda, gerçekten çok detaylı bilgi sunuyor. Ancak bugsnag’in bir kusuru var ki o da paralı olması.

Busnag Laravel paketine şu linkten ulaşabilirsiniz: https://github.com/bugsnag/bugsnag-laravel

Sentry

Sentry.io

Sentry (http://sentry.io/), tıpkı Bugsnag gibi, sitenizde bir hata olduğunda anında yakalayan ve size çeşitli kanallardan (Slack, mail, sms, vd.) bildirim gönderen bir sistem. Sentry hakkında çok fazla detay vermeye gerek yok çünkü Bugsnag ne yapabiliyorsa, aynısını Sentry’de yapabiliyor. Bunun yanında, Sentry belli bir kullanıma kadar ücretsiz. Aylık 10.000 hata yakalama. Ortalama bir proje için oldukça yeterli bir rakam. Zaten hatayı yakaladıkça siz fixleyeceğiniz için, aylık alınan hata sayısı gittikçe düşecektir 🙂

Sentry Laravel paketine şu linkten ulaşabilirsiniz: https://github.com/getsentry/sentry-laravel

Eğer uygulamanız çok fazla hata üretiyorsa, belki de danışmanlık hizmetlerimizden faydalanmanın vakti gelmiştir 🙂