Modern web uygulamalarında, verileri işlemek ve manipüle etmek genellikle bir dizi karmaşık işlemi içerir. Laravel, bu tür durumlar için Pipeline adı verilen güçlü bir özelliği sunar. Pipeline, veri işleme zincirleri oluşturmayı kolaylaştırır ve bu sayede kodunuzu hem daha okunabilir hem de daha yönetilebilir hale getirir. Bu yazıda, Laravel Pipeline özelliğinin nasıl çalıştığını, middleware ile nasıl entegre edilebileceğini ve gerçek dünya uygulamalarında nasıl kullanılabileceğini inceleyeceğiz.
Pipeline Nedir?
Laravel'deki Pipeline, bir işleme akışını (processing pipeline) temsil eder. Verileriniz bir dizi "aşama"dan geçirilir ve her aşama bir işlem gerçekleştirir. Pipeline şu durumlarda kullanışlıdır:
- Büyük veri setlerini parçalar halinde işlemek.
- API'den gelen verileri sıralı filtrelerden geçirmek.
- Adım adım bir işlem dizisi oluşturmak.
Pipeline, Laravel'in Illuminate\Pipeline\Pipeline sınıfı tarafından yönetilir ve genellikle şu adımlarla çalışır:
- Veri bir başlangıç noktasıyla Pipeline'a aktarılır.
- Her bir adım (stage), belirli bir işlem gerçekleştirir.
- İşleme tamamlandığında, veri işlenmiş halde döner.
Pipeline Kullanımı: Temel Yapı
Pipeline'ı kullanmanın temel yapısı şu şekildedir:
use Illuminate\Pipeline\Pipeline;
// Veriyi işleyen pipeline tanımı
$result = app(Pipeline::class)
->send($data) // Başlangıç verisi
->through([
\App\Pipelines\StageOne::class,
\App\Pipelines\StageTwo::class,
]) // İşleme aşamaları
->thenReturn(); // İşlem sonucu
Burada:
send($data): İşlem yapılacak veri veya nesneyi belirler.through([...]): İşlemler zincirini tanımlar.thenReturn(): İşlenmiş veriyi döndürür.
Pipeline İçin Adım (Stage) Oluşturma
Her bir adım, işleme zincirinde bir işlemi temsil eder. Adımlar, bir sınıf olarak tanımlanır ve handle metodu üzerinden işlem yapılır.
namespace App\Pipelines;
class StageOne
{
public function handle($content, $next)
{
// Veriye işlem yap
$content['processed'] = true;
// Sıradaki aşamaya geç
return $next($content);
}
}
Başka bir adım örneği:
namespace App\Pipelines;
class StageTwo
{
public function handle($content, $next)
{
// İşlenmiş veri üzerinde bir kontrol
$content['extra_data'] = 'Ek bilgi eklendi';
return $next($content);
}
}
Yukarıdaki örneklerde, veri bir aşamadan geçtikten sonra sıradaki aşamaya aktarılır.
Gerçek Dünya Uygulaması: Kullanıcı Giriş Verilerini Doğrulama ve İşleme
Pipeline, gerçek hayatta gelen verileri sıralı bir şekilde işlemek için kullanışlıdır. Örneğin, bir kullanıcı formundan gelen verileri doğrulayıp, ardından veriyi temizlemek (sanitize etmek) ve son olarak başka bir işleme göndermek isteyebilirsiniz.
Örnek: Kullanıcı Verilerini İşleme
Formdan gelen veriyi doğrulayıp temizleyen bir Pipeline tanımlayalım:
1. Pipeline'ın Aşamaları:
- Doğrulama (Validation): Formdan gelen verileri kontrol et.
- Temizleme (Sanitize): Geçersiz karakterleri veya boşlukları temizle.
- Formatlama (Formatting): Veriyi doğru formatta döndür.
2. Aşama Sınıfları:
namespace App\Pipelines;
class ValidateInput
{
public function handle($data, $next)
{
if (!isset($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
throw new \Exception('Geçersiz e-posta!');
}
return $next($data);
}
}
namespace App\Pipelines;
class SanitizeInput
{
public function handle($data, $next)
{
$data['name'] = trim($data['name']);
$data['email'] = trim($data['email']);
return $next($data);
}
}
namespace App\Pipelines;
class FormatInput
{
public function handle($data, $next)
{
$data['name'] = ucfirst(strtolower($data['name'])); // İlk harfi büyük yap
return $next($data);
}
}
3. Pipeline Kullanımı:
use Illuminate\Pipeline\Pipeline;
$data = [
'name' => ' ali veli ',
'email' => ' ALI@MAIL.COM '
];
$result = app(Pipeline::class)
->send($data)
->through([
\App\Pipelines\ValidateInput::class,
\App\Pipelines\SanitizeInput::class,
\App\Pipelines\FormatInput::class,
])
->thenReturn();
print_r($result);
Sonuç:
Array
(
[name] => Ali veli
[email] => ALI@MAIL.COM
)
Middleware ile Pipeline Kullanımı
Laravel'de Pipeline mantığı, middleware ile benzer bir çalışma prensibine sahiptir. Middleware'ler, bir istek veya yanıt üzerinde sıralı işlemler yapar. Örneğin, bir REST API'de doğrulama, yetkilendirme ve veri dönüştürme işlemleri Pipeline mantığıyla organize edilebilir.
Middleware ve Pipeline'ı bir arada kullanarak, bir API'ye gelen isteklerin daha okunabilir bir şekilde yönetilmesini sağlayabilirsiniz.
Pipeline Kullanmanın Avantajları
- Kodun Modülerliği: Her bir işlem bir sınıfa ayrılır, bu da kodun yeniden kullanılabilirliğini artırır.
- Okunabilirlik: Adım adım bir veri işleme akışı, karmaşık süreçleri sadeleştirir.
- Bakım Kolaylığı: İşlemler bağımsız olduğu için bir aşamayı düzenlemek diğer aşamaları etkilemez.
- Test Edilebilirlik: Her bir aşama tek başına kolayca test edilebilir.
Sonuç
Laravel'in Pipeline özelliği, veri işleme süreçlerini sadeleştirmenin ve kodu modüler hale getirmenin etkili bir yoludur. Büyük veri setleriyle çalışırken veya karmaşık işleme zincirlerini yönetirken bu yaklaşımı kullanmak, uygulamanızın kod kalitesini önemli ölçüde artırabilir.
