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.
Ö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.
Ö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.
Sihir yok
Tipli sınıflar, öznitelikler ve açık sözleşmeler. Projeye özgü statik analiz kuralları, davranışı gizleyen yapıları reddeder.
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.
İcat yerine standart
Özel kurallar yerine PSR arayüzleri, ICU MessageFormat, Problem Details ve OpenTelemetry.
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.
Yazın
Tipli sınıflar, öznitelikler ve açık sözleşmeler uygulamayı tanımlar.
Derleyin
Derleme; konteyneri, rotaları ve yapılandırmayı bir kez çözer ve çakışan rotalar gibi sorunlarda başarısız olur.
Çalıştırın
Derlenmiş uygulama, istekleri uzun ömürlü bir worker olarak ve her istek için yeni bir kapsamla karşılar.
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
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
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
<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
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
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
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
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.
-
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.
-
Kimlik doğrulama ve yetkilendirme
Oturumlar, guard’lar, passkey’ler, TOTP, API token’ları ve varsayılan olarak reddeden politikalar.
-
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ı.
-
Gerçek zamanlı iletişim
Sunucu, kanallar, presence, yeniden oynatma ve server-sent events; tipli bir TypeScript istemcisiyle.
-
Gözlemlenebilirlik
OTLP üzerinden OpenTelemetry izleri, metrikleri ve günlükleri; ayrıca geliştirme panelleri.
-
Derlenmiş şablonlar
Weft, HTML’e özgü şablonları PHP’ye derler ve her ara değeri kaçışlar.
-
E-posta ve bildirimler
Birden çok taşıyıcı üzerinden DKIM imzalı iletiler; e-posta, SMS, push ve sohbet kanallarında bildirimler.
-
Komut satırı
Derlemek, sunmak, rotaları ve servisleri incelemek ve ortamı denetlemek için tek bir ikili dosya.
-
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.
API arka uçları
Katı girdi işleme sunan tipli HTTP servisleri
SaaS ve çok servisli platformlar
Hesaplar, yerelleştirme, para ve iletişim
Gerçek zamanlı uygulamalar
Canlı güncellemeler, presence ve sürdürülebilir kanallar
Arka plan işleri ve iş akışları
Kuyruklar, yeniden denemeler, zamanlamalar ve kalıcı süreçler
Kurum içi araçlar ve yönetim panelleri
Sunucuda işlenen ekranlar, formlar ve onaylar
Olay güdümlü entegrasyonlar
Olaylar, outbox ve korumalı giden çağrılar
Regülasyona tabi ve güvenlik açısından hassas ortamlar
Kimlik doğrulama, anahtarlar ve günlükler için doğrulanabilir davranış
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.
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ı.
- 01Kod stiliDepo kurallarıyla PER-CS 3.0
- 02Statik analizEn üst düzey, katı kurallar ve proje kuralları
- 03TestlerParalel çalışır; paket başına asgari satır kapsamı
- 04Mutasyon testiPaket başına asgari mutasyon skoru
- 05Fuzzing ve benchmark’larHer değişiklikte smoke koşuları
- 06DokümantasyonHer genel sınıfın bir sayfası vardır ve her sayfa derlenir
- 07Değişiklik günlüğüDeğişen her paketin bir kaydı vardır
- 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ü
1.0’dan önce
- Uygulama iskeleti ve başlangıç kitleri
- Bu sitede herkese açık dokümantasyon
- Kararlı 1.0 sürümü
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.
- Genelhello@plerino.devProjeyle ilgili sorular
- Güvenliksecurity@plerino.devGizli güvenlik açığı bildirimleri
- Basınpress@plerino.devBasın ve iş birlikleri
- Kötüye kullanımabuse@plerino.devBu sitenin veya adreslerinin kötüye kullanımına ilişkin bildirimler
1.0’a giden yolu izleyin
Bugün var olanları keşfedin ya da proje hakkında konuşmak isterseniz bize yazın.