Framework pro PHP 8

  • Moderní, modulární / na architektuře mikroaplikací založený framework, který obsahuje vše co potřebujete

Jak začít s PHP Jet

1. Instalace

Pokud si chcete PHP Jet zatím jen osahat, pak je postup velice jednoduchý:

  • Ujistěte se, že máte nainstalované PHP 8, včetně všech běžných modulů INTL, PDO a mbstring.
  • Stáhněte si balíček z GitHub a ten rozbalte.
    nebo
    Můžete použít composer: composer create-project mirekmarek/php-jet
  • Přejděte do adresáře, kde máte stažený a rozbalený PHP Jet.
  • Spusťte: php _playground/start.php
  • Ve vašem prohlížeči otevřít URL http://localhost:8000/ (pokud jste při spuštění hřiště neurčili jinou adresu a port).
  • Pokud chcete, pak si můžete pro účel testování vytvořit nějakou testovací databázi na MariaDB/MySQL, PostgreSQL a MS SQL (v brzké budoucnosti i Oracle), ale není to nutné. PHP Jet podporuje i SQLite a to pro účel testování stačí.
  • Dokončete instalaci pomocí webového instalátoru.

Zprovoznění na plnohodnotném webovém serveru (Apache, NGINx) je rovněž jednoduché. Viz dokumentace.

2. Rychlé seznámení s ukázkovou aplikací

Po té co se "proklikáte" instalátorem (což je mimochodem obecný základ instalátoru, na jehož základě můžete vytvořit váš instalátor - pro váš SW produkt), pak spatříte celou ukázkovou aplikaci, která zahrnuje:

  • Jednoduchý web obsahující mnoho podstránek, které většinou představují demonstraci standardních schopností PHP Jet a zároveň test různých funkcí ať je to lokalizovatelnost, formuláře, ORM, či REST serveru i klienta a tak dále.
  • Neveřejnou ("zaheslovanou") část webu pro demonstraci a test možností autentizace a autorizace i s provázáním na Jet MVC.
  • Administraci s řadou modulů (např. pro správu uživatelů a rolí, prohlížení logů, ale i primitivní základ CMS).
  • REST API server a zároveň i klient pro otestování.
  • Velice nápomocné vývojářské prostředí Jet Studio s webovým grafickým UI.
  • Integrovaný profiler.
  • ... A to vše rozdělené do aplikačních modulů (mikroaplikací), aby v projektu byl řád. Ukázková aplikace samozřejmě plně využívá unikátní filozofii Jet MVC, samozřejmě ORM DataModel a celou řadu dalších schopností frameworku PHP Jet.

Vše je nachystáno tak, že můžete rovnou vše zkoumat, zkoušet, měnit, prostě si "hrát". Rovnou máte k dispozici základ reálné aplikace úhledně rozdělené do jasné struktury.

3. První "routa"

PHP Jet nemá žádné routy v tom smyslu jak je znáte z jiných frameworků, ale má něco mnohem lepšího.

Jak funguje Jet MVC je téma samo o sobě, ale zde se pokusím o pokud možno stručné vysvětlení.

Základní myšlenkou je, že každá webová aplikace se skládá z bází a stránek. Jednotlivé stránky jsou tvořeny layoutem - rozvržením. V rámci stránek jsou pak spouštěny jednotlivé aplikační moduly - jako mikro-aplikace. A až v rámci těchto mikro-aplikai naleznete něco, co je obdobné routování, které můžete znát z jiných frameworků.

Báze určuje o jakou část aplikace se jedná. (Je to administrace? Jeto API? Je to cokoliv dalšího?). Báze je entita se kterou se dá pracovat. Báze podporuje i lokalizovatelnost - podporu více národních mutací aplikace.

Stránka je rovněž entita se kterou se dá pracovat a která na sebe váže obsah.

Mezi stránkami je možné vytvářet navigaci, měnit jejich uspořádání i URL při zachování funkčnosti celého projektu.

Aplikační moduly jsou rozmístěny v rámci stránky a mají vlastní routování.

Vše je dané pouze definice uložené v souborech. Nic nepoužívá databázi. Celý systém je velice rychlý a nenáročný, optimalizované na opravdu velice rozsáhlé projekty.

A to nejlepší - celou strukturu vaší aplikace (například webu) si můžete vytvořit pohodlně pomocí nástroje Jet Studio.

4. Lokalizovatelnost

Jistě jste si již všimli, že lokalizovatelnost je integrální součástí PHP Jet. Již Jet MVC s lokalizovatelností aplikace pevně počítá. A tedy samozřejmě nesmí chybě ani překladač, či formátování informací dle národních zvyklostí.

5. Aplikační moduly / mikro-aplikace

I neustále opakované téma aplikační moduly vám neuniklo. Poslední dobou se hodně mluví o architektuře mikro-služeb. Vězte, že toto je vlastně to samé. Je to stejná filozofie a stejné benefity - rozdělení projektu do malých snadno udržovatelných a ideálně znovu použitelných mikro-aplikací. To je PHP Jet sám o sobě - je tak přímo od počátku vymyšlen a navrhnut.

6. ORM

Integrované ORM DataModel je typické především v tom, že je to doopravdy ORM. Tedy na datové entity nekouká z perspektivy datových tabulek v relační databázi a SQL, ale z perspektivy tříd. Když navrhujete (naklikáváte v Jet Studiu - proč to dělat ručně?) například entitu představující článek, či zboží v e-shopu, pak se uvažuje především v rovině tříd a jejich uspořádání. DataModel se pak postará o takové ty "otravné" věci jako je ukládání, načítání, aktualizace a mazání dat.

Nehledejte nic jako adresář migrations. Definice entit (toho jak jsou uložené v databázi) jsou tam kde mají být - přímo ve třídách entity reprezentující. Což ale není zas tak unikátní - v tom PHP Jet originální není a podobá se například Doctrine.

Základní filozofie je sice obdobná, ovšem na rozdíl třeba od zmíněné Doctrije je Jet DataModel mnohem menší a jednodušší, řadu věcí řeší mnohem jednodušeji a zároveň je k dispozici nástroj v rámci Jet Studia, kde je možné si entity "naklikávat". Například Jet DataModel nepotřebuje nic jako Entity Manager, proxy třídy a tak dále. Použití DataModel je maximálně přímočaré, přirozené a jednoduché.

Příklad? Zde jsou:

/* 
 * Získání článku podle ID
 */
$article Content_Article::get$id );

/* 
 * Změna data článku:
 */
$article->setDateTimeData_DateTime::now() );
$article->save();


/*
 * Získání instancí všech článků 
 */
$articles Content_Article::fetchInstances();

/* 
 * Získání instancí článků, které jsou vytvořené před rokem a v jejich 
 * LOKALIZOVANÉ titulku se vyskytuje slovo PHP nebo Jet
 * s použitím VNITŘNÍ RELACE entity
 */
$articles Content_Article::fetchInstances(
    
where: [
        
'date_time <=' => new Data_DateTime('-1 year'),
        
'AND',
        
'article_localized.title *' => ['PHP''Jet']
    ]
);

/*
 * Vytažení mapy titulků článků v české lokalizaci. (Klíč pole = ID článku, povek = titulek)
 */
$articles Content_Article_Localized::dataFetchAssoc(
    
select: ['article_id''title'],
    
where: [
        
'locale' => new Locale('cs_CZ')
    ]
)

ORM DataModel je navržené tak, aby bylo možné dosáhnout co nejlepšího výkonu aplikace. Nabízí tedy různé možnosti jak například nahrávat data (částečné načtení, načtení surových dat, načtení pomocí různých postupů, ...) a tak dále.

Při správném pochopení ORM DataModel je možné vyvíjet velice výkonné aplikace, přenositelné na různé databázové systémy a zároveň si ušetřit opravdu velké množství rutinní a otravné práce. Ovšem DataModel se vám neplete do práce a nesnaží se za vás přemýšlet!. Pomáhá vám s rutinou a přemýšlení nechává na vás - vy víte nejlépe co a proč děláte.

Pokud chcete, tak koukněte do Jet Studia a naklikejte si vlastní entitu, nebo si upravte nějakou z těch, které již ukázková aplikace má. Je to jednoduché, naprosto jednoduché.

7. Konfigurace

Konfiguraci jste již provedli a to "naklikáním" ve webovém instalátoru.

Jet má dvě úrovně konfigurace. Základní je konfigurace samotné platformy. Ta slouží k nastavení takových věcí jako je zapnutí / vypnutí vývojářského režimu, keše a řady dalších věcí. Nic zvláštního ...

Ovšem v instalátoru jste vyplňovali několik formulářů. Například jste vytvářeli databázové spojení, ale nejen to. A to už je zajímavější ;-)

PHP Jet má systém konfigurace aplikace. Jde o to, že si můžete vytvářet konfigurační entity (třídy s definicí konfigurace) a na ně vázat formuláře a pak velice jednoduše vytvářet například onen instalátor, kterým jste prošli.

8. Formuláře

A práce s formuláři pochopitelně nesmí v PHP Jet chybět. Je to další velice rozsáhlé téma, protože podpora formulářů je v PHP Jet opravdu velice propracovaná - ale v principu stále velice jednoduchá.

Co to umí?

  • Samozřejmě základní definice formuláře a jeho polí pomocí příslušných tříd.
  • Jsou předimplementovány všemožné typu polí, ale nic vám nebrání implementaci změnit, či si vytvořit nové typy polí.
  • Zachycení vstupních dat (a to i například z REST požadavku), validace dat, práce s chybami a rovněž zabezpečení vstupu.
  • Napojení na překladač lokalizace - překlad všeho od popisků polí po chybové hlášky.
  • Systém pro snadné, unifikované, ale stále velice flexibilní zobrazování formulářů.
  • Mapování formulářů přímo na třídy.
  • Nástroj pro naklikání definic formulářů mapovaných na třídy v Jet Studiu.


10. A tak dále ...

A to zdaleka není vše co Jet umí ... Je toho víc:

  • Díky systému továren máte možnost vyměnit "střeva" PHP Jet za své vlastní implementace aniž by přestala fungovat aplikace. Nevyhovuje vám například jak je implementována MVC stránka? Nic vám nebrání vytvořit si svou implementaci a jednoduše ji vložit do systému a zároveň zachovat celou filozofii a funkčnost.
  • Systém autorizace a autorizace je také velice zajímavý.
  • Žádný vývojář by rozhodně neměl zapomenout používat profiler.
  • Nechybí usnadnění obecné práce s navigací aplikace.
  • Součástí Jet je i systém pro generování UI na straně serveru a samozřejmě i podpora AJAX.
  • A řada dalších užitečných věcí jako je posílání e-mailů, práce s obrázky, práce se stromovou strukturou dat, a tak dále, ...

Pokud se budete chtít na něco zeptat, tak v nedávné době jsem aktivoval diskuze na GitHub, kde vám určitě rád odpovím, případně stále můžete kontaktovat přímo mou maličkost.

Díky za přečtení a věřím, že vám PHP Jet zpříjemní vaší práci!