Larafony 2.0 – czyli darmowy* kurs zaktualizowany do PHP 8.5
        Możesz uczyć się z obszernego README repozytorium
        
            github.com/DJWeb-Damian-Jozwiak/larafony
        .
        
        Ale jeśli chcesz krok po kroku zrozumieć każdy element –
        sprawdź pełny kurs PHP 8.5 w postaci ebooka 📚,
        gdzie wszystko dokładnie tłumaczę.
    
Nie potrzebujemy kolejnego tutorialowego boilerplate’u. Potrzebujemy narzędzi do prawdziwej roboty. I właśnie dlatego powstało Larafony – połączenie elegancji Laravel, solidności Symfony i mocy nowoczesnego PHP 8.5. Nie jako paczka, lecz pełnoprawny framework produkcyjny.
Wersja 2.0 to nie tylko zgodność z PHP 8.5 (pipe operator, array_first/last, fatal error backtraces), ale też kompletny refactor kluczowych komponentów: Clock, HTTP Kernel, Routing i ORM. Wszystko opisane krok po kroku w rozdziałach kursu Larafony.
1. Clock – PSR-20 Time Handling (Rozdział 3)
Zamiast Carbon czy DateTime, Larafony stawia na czysty PSR-20 z pełnym wsparciem dla testowalności i mockowania.
<?php
use Larafony\Clock\SystemClock;
use Larafony\Clock\FrozenClock;
$clock = new SystemClock();
echo $clock->format('Y-m-d H:i:s');
$testClock = FrozenClock::fromString('2025-10-21 12:00:00');
$testClock->advance('+1 hour');Porównanie: Larafony vs Carbon vs Symfony Clock
| Funkcja | Larafony Clock (PSR-20) | Laravel Carbon | Symfony Clock | 
|---|---|---|---|
| Standard PSR | ✅ PSR-20 native | ❌ Proprietary API | ✅ PSR-20 | 
| Testowalność | ✅ FrozenClock (mock) | ⚙️ Carbon::setTestNow() | ✅ MockClock() | 
| Dependency Injection | ✅ ClockInterface (PSR-20) | ❌ Global static (based on PSR-20) | ✅ Service Container | 
| Formatowanie czasów | ✅ Enum TimeFormat::ISO8601 | ✅ Metody Carbon | ❌ Brak helperów | 
| Wymagania | PHP 8.5+, zero zależności | Carbon paczka | Symfony Component | 
2. HTTP Kernel i Routing – PSR-7/15 (Rozdziały 5 i 15)
Larafony używa routingów opartych na atrybutach i pełnego stacka PSR-7/15 zamiast magii Laravela czy ciężkiego configu Symfony. Każdy kontroler jest czystym obiektem PHP.
<?php
use Larafony\Routing\Attribute\Route;
use Psr\Http\Message\ResponseInterface;
#[RouteGroup('blog')]
final class BlogController
{
    #[Route('/posts/<id:\d+>', 'GET', name: 'posts.show')]
    public function show(
        ServerRequestInterface $request,
        #[RouteParam(model: Post::class, findMethod: 'findOrFail')]
        Post $post
    ): ResponseInterface
    {
        // $post is automatically fetched from database
        // Throws 404 if not found (using findOrFail)
        return $this->json(['post' => $post]);
    }
    #[Route('/posts/<slug:[a-z-]+>', 'GET', name: 'posts.by-slug')]
    public function showBySlug(
        ServerRequestInterface $request,
        #[RouteParam(model: Post::class, findMethod: 'findBySlug')]
        Post $post
    ): ResponseInterface
    {
        // Uses custom finder method
        return $this->json(['post' => $post]);
    }
}Porównanie Routingu i Middleware
| Funkcja | Larafony (PSR-7/15) | Laravel | Symfony | 
|---|---|---|---|
| Definicja tras | ✅ PHP Attributes | 📄 routes/web.php | 📜 annotations lub YAML | 
| Middleware stack | ✅ Deklaratywny PSR-15 | ⚙️ Kernel.php klasowo | ⚙️ EventSubscriber | 
| Wydajność w produkcyjnym | 🚀 Route Cache + Compiled Routes | 🟡 Route Cache | 🟠 Kompilacja Annotation | 
| Parametryzacja tras | ✅ Regex + type hinty | 🟡 implicit binding | ✅ ParamConverter | 
| PSR zgodność | ✅ pełna (7, 15, 17) | ❌ własne interfejsy | 🟡 częściowa PSR-7 | 
3. ORM z Property Observers (Chapter 13)
ORM Larafony to hybryda ActiveRecord i EntityFramework – pełne śledzenie zmian właściwości dzięki PHP 8.5 property hooks.
<?php
class Post extends Model
{
    public string $table { get => 'posts'; }
    public ?string $title {
        get => $this->title;
        set {
            $this->title = $value;
            $this->markPropertyAsChanged('title');
        }
    }
    #[BelongsTo(related: User::class, foreignKey: 'user_id', ownerKey: 'id')]
    public ?BelongsToRelation $user {
        get => $this->relations->get('user');
    }
    public ?int $user_id {
        get => $this->user_id;
        set {
            $this->user_id = $value;
            $this->markPropertyAsChanged('user_id');
        }
    }
}Porównanie ORM – Larafony vs Eloquent vs Doctrine vs .NET EF
| Funkcja | Larafony ORM | Laravel Eloquent | Doctrine ORM | .NET Entity Framework | 
|---|---|---|---|---|
| Wzorzec | ActiveRecord + Observers | ActiveRecord | DataMapper | Change Tracking | 
| Śledzenie zmian | ✅ Property Observers | ⚙️ Dirty Checking | 🟡 UnitOfWork | ✅ Auto Change Tracking | 
| Definicja modelu | PHP 8.5 property hooks | class $fillable | annotations/XML | C# POCO class | 
| Typowanie | ✅ strict typed | 🟡 mixed fields | 🟡 hydrated objects | ✅ strong typed | 
| Relacje | ✅ lazy / eager load / definiowane atrybutami | ✅ hasMany / belongsTo | ✅ mappedBy / cascade | ✅ navigation props | 
| Performance | 🚀 Ultra-light | 🟡 średni | 🟠 ciężki | 🟡 średni | 
4. Nowości PHP 8.5 w praktyce
        Dzięki pipe operatorowi (|>) i funkcjom array_first()/array_last() Larafony pisze się krócej i czytelniej:
    
$title = $request->input('title')
    |> trim(...)
    |> strtolower(...)
    |> (static fn(string $t) => ucfirst($t));
$user = $users
    |> (static fn($data) => array_filter($data, static fn($u) => $u['active']))
    |> (static fn($data) => array_first($data));5. Podsumowanie
Larafony 2.0 to framework dla tych, którzy lubią prostotę Laravel, solidność Symfony i nowoczesność PHP 8.5 – bez zbędnego balastu. To kod pisany dla produkcji, a kurs jest jego otwartą dokumentacją.
Larafony 1.0 (znany jako "kurs PHP") używał bibliotek Carbon, Twig, Faker, Symfony VarDumper oraz Symfony Mailer. Larafony 2.0 prawdopodobnie wykorzysta Symfony Mailer (choć być może zaimplementuję obsługę maili od zera) oraz Twig (jako opcjonalny pakiet w osobnym repozytorium – niewymagany przez główny framework). Dzięki temu możemy uznać Larafony 2.0 za framework bez zależności (tylko PSR).
🔗 Repozytorium (PHP8.5): github.com/DJWeb-Damian-Jozwiak/larafony 🔗 Repozytorium (PHP8.4): github.com/DJWeb-Damian-Jozwiak/book
🎓 Chcesz zrozumieć, jak powstaje framework od zera?
Larafony to framework pisany od zera, moduł po module, z pełną zgodnością z PSR i nowym standardem PHP 8.5. 🎁 Kupując teraz otrzymasz w grudniu 2025 darmową aktualizację do PHP 8.5! Od stycznia 2026 Oba kursy będą do nabycia łącznie (w wyższej cenie) lub każdy osobno (w obecnej cenie)