TR

1.0 hedefiyle aktif geliştirme aşamasında

Derleme zamanında derlenir. Worker olarak çalışır.

Plerino açık kaynak bir PHP framework’üdür. Yönlendirme, servis konteyneri, yapılandırma, olay dinleyicileri ve şablonlar önceden derlenir; uygulama ardından uzun ömürlü bir worker olarak çalışır.

Ekosistemi keşfedin Nasıl çalıştığını görün

Dil
PHP 8.5.12+
Lisans
MIT
Yürütücü
PHRAMEA
Sürüm
1.0 öncesi

01İlkeler

Her pakete uygulanan altı kural

Plerino, PHP arka uçlarını öngörülebilir kılmak için var. Genellikle uygulama çalışırken alınan kararlar, uygulama derlenirken bir kez alınır.

  1. Önce derleme zamanı

    Derleme; rotaları, servisleri, yapılandırmayı, dinleyicileri ve şablonları bir kez çözer. Çalışma zamanında tarama yoluyla hiçbir şey keşfedilmez.

  2. Önce worker

    Uygulama bir kez başlar ve çok sayıda isteği karşılar. Worker yenileme ve sağlık uç noktaları yerleşiktir.

  3. Sihir yok

    Tipli sınıflar, öznitelikler ve açık sözleşmeler. Projeye özgü statik analiz kuralları, davranışı gizleyen yapıları reddeder.

  4. Varsayılan olarak güvenli

    Tek kriptografi sağlayıcısı libsodium’dur; gizli bilgiler günlüklerde maskelenir ve şablonlar çıktıyı varsayılan olarak kaçışlar.

  5. İcat yerine standart

    Özel kurallar yerine PSR arayüzleri, ICU MessageFormat, Problem Details ve OpenTelemetry.

  6. Kararlı genişletme noktaları

    Sözleşmeler tek bir pakette durur; üçüncü taraflar Plerino’yu değiştirmeden genişletebilir.

02Nasıl çalışır

Kaynaktan worker’a

Tek hat, dört aşama. Çakışmalar ve hatalar üretimde değil, derlemede ortaya çıkar.

  1. Yazın

    Tipli sınıflar, öznitelikler ve açık sözleşmeler uygulamayı tanımlar.

  2. Derleyin

    Derleme; konteyneri, rotaları ve yapılandırmayı bir kez çözer ve çakışan rotalar gibi sorunlarda başarısız olur.

  3. Çalıştırın

    Derlenmiş uygulama, istekleri uzun ömürlü bir worker olarak ve her istek için yeni bir kapsamla karşılar.

  4. Gözlemleyin

    İzler, metrikler ve günlükler örnekleme ve maskeleme ile OTLP üzerinden dışa aktarılır.

03Kod turu

Kod nasıl görünür

Her örnek, API’yi bugün depoda olduğu hâliyle kullanır. API’ler 1.0’dan önce değişebilir.

Rotalar özniteliktir

Rota, işleyicinin üzerinde bildirilir ve statik bir eşleştiriciye derlenir. Tipli parametreler, işleyici çalışmadan önce dönüştürülür.

  • {id:int}, ulid, uuid, slug ve date gibi tipli parametreler
  • Çakışan rotalar derlemeyi durdurur
  • Diziler ve nesneler JSON yanıtına dönüşür

İlgili paketler

app/HelloHandler.phpPHP
use Plerino\Routing\Attributes\Get;

#[Get('/hello/{name}', name: 'hello')]
final readonly class HelloHandler
{
    public function __invoke(string $name): array
    {
        return ['message' => 'Hello, ' . $name];
    }
}

İstekler tipli nesnelere dönüşür

Girdi sınıfı, her değerin nereden geldiğini bildirir. Skaler değerler, enum’lar, iç içe girdiler ve diziler katı biçimde dönüştürülür.

  • Kaynaklar: rota, sorgu, gövde ve başlık
  • Başarısız çözümleme, hataları alan bazında listeler
  • Uzunluk ve biçim gibi kurallar doğrulama paketindedir

İlgili paketler

app/CreateTicket.phpPHP
use Plerino\Http\ArrayOf;
use Plerino\Http\From;
use Plerino\Http\Input;
use Plerino\Http\Source;

final readonly class CreateTicket extends Input
{
    public function __construct(
        #[From(Source::Route)]
        public int $project,
        #[From(Source::Body)]
        public string $title,
        #[ArrayOf('int')]
        public array $labels = [],
        #[From(Source::Query)]
        public bool $notify = false,
        #[From(Source::Header, 'X-Request-Id')]
        public string $requestId = '',
    ) {}
}

HTML’e özgü şablonlar

Weft şablonları derleme zamanında PHP’ye derlenir. Her ara değer kaçışlanır ve bileşenler tipli prop’lar alır.

  • Bileşenler, slot’lar ve tipli prop’lar
  • Her bağlamda varsayılan kaçışlama
  • Katı bir içerik güvenliği politikası için tasarlandı

İlgili paketler

views/products.weft.phpWeft
<l-props>string $heading, array $products</l-props>
<Layout :title="$heading">
<h1>{{ $heading }}</h1>
<ul l-if="$products !== []">
<li l-each="$products as $name => $price">{{ $name }}: {{ $price }}</li>
</ul>
<p l-else>No products.</p>
</Layout>

Özniteliklerle tanımlanan varlıklar

Tessera, varlık meta verisini doğrular ve derleme zamanında derler; worker bir sütunu bulmak için öznitelikler üzerinde yansıma yapmaz.

  • PostgreSQL, MySQL ve SQLite
  • Değerleri bağlanan, değişmez sorgu oluşturucu
  • Şema farklarından üretilen migration’lar

İlgili paketler

app/Author.phpPHP
use Plerino\Tessera\Attributes\Column;
use Plerino\Tessera\Attributes\ColumnType;
use Plerino\Tessera\Attributes\Entity;
use Plerino\Tessera\Attributes\HasMany;
use Plerino\Tessera\Attributes\Id;
use Plerino\Tessera\Attributes\IdStrategy;
use Plerino\Tessera\Attributes\Unique;

#[Entity('authors')]
#[Unique(['name'])]
final class Author
{
    #[HasMany(Post::class)]
    public array $posts = [];

    public function __construct(
        #[Column(ColumnType::String)]
        public string $name = '',
        #[Id(IdStrategy::Ulid)]
        public string $id = '',
    ) {}
}

İşler final readonly sınıflardır

Kurucu parametreleri veridir, __invoke ise işleyicidir. İşler kuyrukta serileştirilmiş nesne olarak değil, JSON zarfları olarak taşınır.

  • Geri çekilme ve jitter ile yeniden denemeler
  • Tekil işler ve idempotency anahtarları
  • Zehirli iletiler için dead-letter deposu

İlgili paketler

app/Jobs/SendInvoice.phpPHP
use Plerino\Flux\Attributes\Job;
use Plerino\Flux\Attributes\Retry;
use Plerino\Flux\Attributes\Unique;
use Plerino\Flux\Job\Backoff;
use Plerino\Flux\Job\BackoffKind;

#[Job(queue: 'mail', timeout: 30)]
#[Retry(times: 4, backoff: new Backoff(BackoffKind::Exponential, seconds: 5, maxSeconds: 300, jitter: true))]
#[Unique(by: ['invoiceId'], for: 600)]
final readonly class SendInvoice
{
    public function __construct(public int $invoiceId, public string $locale = 'en') {}

    public function __invoke(InvoiceMailer $mailer): void
    {
        $mailer->send($this->invoiceId, $this->locale);
    }
}

Kalıcı iş akışları

İş akışı; adımlardan, zamanlayıcılardan ve onaylardan oluşan sıralı bir listedir. Her karar bir olay günlüğüne eklenir ve durum yeniden oynatılarak kurulur.

  • Telafi adımları ters sırayla çalışır
  • Zamanlayıcılar ve insan onayı
  • Hiçbir şey yalnızca bellekte yaşamaz

İlgili paketler

app/Workflows/fulfilment.phpPHP
use Plerino\Clock\Duration;
use Plerino\Flux\Workflow\WorkflowDefinition;

$definition = WorkflowDefinition::named('order-fulfilment')
    ->step('reserve-stock', new ReserveStock())
    ->approval('manager-review', approvers: 2)
    ->timer('cooling-off', Duration::hours(24))
    ->step('charge-card', new ChargeCard());

Tipli gerçek zamanlı istemci

Comet, protokolünü WebSocket ve server-sent events üzerinden konuşur. TypeScript istemcisi, bağlantı koptuktan sonra kanalları kaldığı yerden sürdürür.

  • Tipli desenlere ve politikalara sahip kanallar
  • Presence ve yeniden oynatma penceresi
  • Uçtan uca şifreli kanallar

İlgili paketler

orders.tsTypeScript
import { createClient } from '@plerino/comet';

const client = createClient({ url: 'wss://example.test/comet' });
const orders = client.channel('orders.42');

const stop = orders.on('paid', (payload, meta) => {
  console.log(meta.id, payload);
});

await orders.publish('note', { text: 'shipped' });

stop();
orders.leave();

04Yetenekler

Tutarlı tek bir paket kümesi

Her paketin kendi testleri, dokümantasyonu ve değişiklik günlüğü vardır ve hepsi aynı kurallara uyar.

  • plerino/tessera

    Veri erişimi

    SQL veritabanları için varlıklar, repository’ler, sorgu oluşturucu ve migration’lar; MongoDB için belge deposu ve tek sözleşme arkasında vektör arama.

  • plerino/aegis

    Kimlik doğrulama ve yetkilendirme

    Oturumlar, guard’lar, passkey’ler, TOTP, API token’ları ve varsayılan olarak reddeden politikalar.

  • plerino/flux

    Arka plan işleri

    En az bir kez teslim ve dead-letter yönetimiyle kuyruklar, işler, toplu işler ve kalıcı iş akışları.

  • plerino/comet

    Gerçek zamanlı iletişim

    Sunucu, kanallar, presence, yeniden oynatma ve server-sent events; tipli bir TypeScript istemcisiyle.

  • plerino/lens

    Gözlemlenebilirlik

    OTLP üzerinden OpenTelemetry izleri, metrikleri ve günlükleri; ayrıca geliştirme panelleri.

  • plerino/weft

    Derlenmiş şablonlar

    Weft, HTML’e özgü şablonları PHP’ye derler ve her ara değeri kaçışlar.

  • plerino/mail

    E-posta ve bildirimler

    Birden çok taşıyıcı üzerinden DKIM imzalı iletiler; e-posta, SMS, push ve sohbet kanallarında bildirimler.

  • plerino/cli

    Komut satırı

    Derlemek, sunmak, rotaları ve servisleri incelemek ve ortamı denetlemek için tek bir ikili dosya.

  • plerino/scheduler

    Zamanlama

    Zamanlamalar derleme zamanında derlenen özniteliklerdir; saat dilimleri, çakışma koruması ve düğümler arası kilitlerle.

05Kullanım alanları

Plerino nerede kullanılır

Plerino genel amaçlı bir arka uç framework’üdür. Paketleri şu tür sistemler için tasarlanmıştır.

  1. API arka uçları

    Katı girdi işleme sunan tipli HTTP servisleri

  2. SaaS ve çok servisli platformlar

    Hesaplar, yerelleştirme, para ve iletişim

  3. Gerçek zamanlı uygulamalar

    Canlı güncellemeler, presence ve sürdürülebilir kanallar

  4. Arka plan işleri ve iş akışları

    Kuyruklar, yeniden denemeler, zamanlamalar ve kalıcı süreçler

  5. Kurum içi araçlar ve yönetim panelleri

    Sunucuda işlenen ekranlar, formlar ve onaylar

  6. Olay güdümlü entegrasyonlar

    Olaylar, outbox ve korumalı giden çağrılar

  7. Regülasyona tabi ve güvenlik açısından hassas ortamlar

    Kimlik doğrulama, anahtarlar ve günlükler için doğrulanabilir davranış

  8. Tüm kullanım alanları

    Gerçek paketlerle eşlenir

06Ekosistem

Alanlara göre paketler

Composer paketlerinden oluşan tek bir monorepo. Her paket tek başına kurulur.

Temel
HTTP ve çalışma zamanı
Şablonlar ve ön yüz
Veri
Arka plan işleri
Gerçek zamanlı
Güvenlik
İletişim
Uygulama desteği
Gözlemlenebilirlik

Tüm paketlere göz atın

Standartlar üzerine kurulu

  • PSR-3
  • PSR-6
  • PSR-7
  • PSR-15
  • PSR-16
  • PSR-17
  • PSR-18
  • PSR-20
  • ICU MessageFormat
  • RFC 9457 Problem Details
  • OpenTelemetry
  • WebAuthn
  • libsodium

07Kalite

Mühendislik kalitesi

Her değişiklik, ancak kalite kapısının tamamı PHP 8.5 ve PHP 8.6 üzerinde geçtikten sonra birleştirilir.

Performans ve güvenlik beyanları yalnızca tekrarlanabilir bir benchmark ya da testle desteklendiğinde yapılır. Henüz hiçbir benchmark sonucu yayımlanmadı.

  1. 01Kod stiliDepo kurallarıyla PER-CS 3.0
  2. 02Statik analizEn üst düzey, katı kurallar ve proje kuralları
  3. 03TestlerParalel çalışır; paket başına asgari satır kapsamı
  4. 04Mutasyon testiPaket başına asgari mutasyon skoru
  5. 05Fuzzing ve benchmark’larHer değişiklikte smoke koşuları
  6. 06DokümantasyonHer genel sınıfın bir sayfası vardır ve her sayfa derlenir
  7. 07Değişiklik günlüğüDeğişen her paketin bir kaydı vardır
  8. 08Bağımlılıklar ve gizli bilgilerBağımlılık denetimi ve gizli bilgi taraması

08Durum

Proje ne durumda

Plerino, 1.0 hedefiyle aktif olarak geliştiriliyor. Henüz kararlı bir sürüm yok ve genel API’ler 1.0’dan önce değişebilir.

Depoda uygulandı

  • Temel, konteyner, çekirdek ve derleme hattı
  • HTTP, yönlendirme, FrankenPHP worker ve PHP-FPM sürücüleri
  • Derlenmiş Weft şablonları
  • SQL veri erişimi, belge deposu ve vektör arama
  • Kuyruklar, işler, iş akışları, zamanlayıcı ve olaylar
  • Gerçek zamanlı sunucu ve TypeScript istemcisi
  • Kimlik doğrulama ve yetkilendirme
  • E-posta ve bildirimler
  • OpenTelemetry telemetrisi ve geliştirme panelleri

Planlanan paketler

  • Swoole ve RoadRunner sürücüleri
  • Çalışma zamanı uygulama koruması
  • Veri sınıflandırma ve denetim araçları
  • Özellik bayrakları
  • Arama sürücüleri
  • Sunucu taraflı işleme sunan ön yüz adaptörü

09SSS

Sık sorulan sorular

Plerino nedir?

Yönlendirmeyi, servisleri, yapılandırmayı, dinleyicileri ve şablonları derleme zamanında derleyen ve uygulamayı uzun ömürlü bir worker olarak çalıştıran açık kaynak bir PHP framework’ü.

Plerino üretime hazır mı?

Henüz değil. Kararlı bir sürüm yok ve genel API’ler 1.0’dan önce değişebilir.

Hangi PHP sürümlerini destekliyor?

PHP 8.5.12 ve üzeri. Her değişiklik PHP 8.5 ve PHP 8.6 üzerinde denetlenir.

Hangi çalışma ortamlarını destekliyor?

Çalışma zamanı paketi, FrankenPHP worker modu ve PHP-FPM için sürücüler içerir. Swoole ve RoadRunner sürücüleri planlanıyor.

Hangi veritabanlarını destekliyor?

SQL katmanıyla PostgreSQL, MySQL ve SQLite; belge deposuyla MongoDB; pgvector, sqlite-vec ve Atlas Vector Search ile vektör arama.

Ücreti nedir, kim sürdürüyor?

Plerino, MIT lisansı altında özgür bir yazılımdır ve PHRAMEA tarafından sürdürülür.

Kaynak kod nerede?

Kaynak deposu henüz herkese açık değil. Projeyle ilgili sorularınız için hello@plerino.dev adresine yazabilirsiniz.

Güvenlik sorununu nasıl bildiririm?

security@plerino.dev adresine gizli bir bildirim gönderin. Lütfen herkese açık bir kayıt açmayın. Şifreli bildirimler için bir OpenPGP anahtarı mevcuttur.

Dokümantasyonu nerede okuyabilirim?

Dokümantasyon, bu sitede yayımlanmak üzere hazırlanıyor.

10İletişim

İletişim

Konunuza uygun adrese yazın.

1.0’a giden yolu izleyin

Bugün var olanları keşfedin ya da proje hakkında konuşmak isterseniz bize yazın.

Ekosistemi keşfedinİletişime geçin

Aramak için yazın. Ok tuşlarıyla gezinin, Enter ile açın.

Öneriler