Co se chystá v příštích verzích?

by David Grudl about a month ago in Nette

Co přinesou příští verze Nette Frameworku a jaký je plán pro další vývoj?

Nette je tvořeno řadou knihoven, z nichž některé patří mezi světovou špičku: Latte je nejbezpečnější šablonovací systém, Tracy je mnohými považován za nejpřívětivější debugovací nástroj, Dependency Injection Container patří mezi ty nejpohodlněji použitelné. Spousta konceptů vznikla šťastnou rukou a fungují v prakticky nezměněné podobě už 10 let, například formuláře nebo komponentový systém presenterů.

Nicméně ve všech oblastech je hodně příležitostí co vylepšovat a inovovat. A nápadů je spousta.

Brzký příchod Nette 3

Jelikož podpora Nette 2.4 podle harmonogramu skončila v červnu 2018, tedy po dvou letech od jeho vydání, je hlavní prioritou brzký příchod nové verze Nette 3. Ta bude určená pro PHP 7.1 a bude využívat jeho zásadních novinek, jako:

  • poběží ve striktním režimu
  • kód bude používat skalární typehinty
  • metody budou mít návratové typehinty

Zároveň je záměr připravit:

  • nástroj pro automatizovanou aktualizaci kódu pro novou verzi frameworku (jako tomu bývalo u Nette 0.9 a 2.0)
  • aktualizovat dokumentaci včetně příkladů
  • vygenerovat API dokumentaci na webu https://api.nette.org (v současnosti chybí generátor dokumentace)
  • zajistit kompatibilitu s připravovaným PHP 7.3

Do Nette 3 se mohou zahrnout i některé z plánovaných featur uvedených níže, ale nic, co by oddalovalo vydání. Stabilní verze následovaná po testovacích RC by mohla vyjít v rozmezí října až listopadu 2018 (viz konec článku).

Nette 4

Ihned po vydání Nette 3 by začal vývoj Nette 4. Hlavní novinkou by byla změna vnitřní architektury na tzv. middleware. Komponenta pro zpracování a sanitizaci HTTP požadavku, router, PresenterFactory i samotný presenter by byly vrstvy middleware, mezi které bude možné snadno včlenit další vrstvy, nebo tyhle existující nahradit. Mělo by tak být mnohem snadnější provozování různých aplikací či dokonce frameworků na jednom webu. Každá vrstva by mohla požadavek odmítnout, třeba router by mohl legitimně vyhodit chybu 404. Zároveň by nové řešení mělo být plně kompatibilní se stávajícími presentery, takže bude možné vytvářet aplikace využívající jak nových middleware-presenterů, tak i presenterů současných.

Tato změna architektury vyřeší řadu issues, které ve frameworku existují už dlouho, ale nebylo snadné je zprovodit ze světa:

Další plány

Alespoň bodově se pokusím zmínit další plány pro důležité balíčky. Ve které verzi budou implementované je zatím otevřené.

Application

  • nativní presenter pro REST a API
  • oddělit routování do samostatného balíčku
  • snadnější používání LinkGenerator pod CLI

Application\UI

  • nahradit přímé odesílání HTTP hlaviček (přes HttpResponse) abstrakcí
  • zrychlit generování odkazů kešováním
  • možnost vkládat bloky šablony do komponent
  • CSRF ochrana pro odkazy
  • pokusit se odstranit parametr _fid
  • vyřešit problém s odkazem this nebo formulářem v Error presenteru
  • nativní podpora oprávnění na úrovní presenterů a akcí, makro n:if-allowed
  • cmdline nástroj pro předgenerování presenterů a šablon

DI

  • autodiscovery: automatická registrace služeb pomocí masky, podobně jako u presenterů
  • validovatelné schéma pro formát NEON
  • podpora pro předání pole služeb určitého typu (@param Service[])
  • podpora pro předání pole služeb pomocí tagu
  • umožnit rozšířením registrovat vlastní options (jako inject:, autowired:) v definicích služeb
  • vyřešit problém s prioritou volání rozšíření

Forms

  • vytvořit nativní podporu pro plně dynamické formuláře
  • podpora pro nativní validaci přes AJAX
  • automatická CSRF ochrana
  • provázání na třídy entit, setDefaults() bude přijímat a getValues() vracet objekt entity
  • upravit objektový návrh tak, aby setValue() a getValue() mohly mít správné typehinty
  • připravit ukázku rendereru pro Bootstrap 4

Latte

  • vytvoření nového AST parseru, který posune možnosti maker na novou úroveň
  • možnost spojení šablony se třídu (a jejími properties), aby fungovalo našeptávání nebo statická kontrola i v šabloně
  • implementovat sandbox režim
  • zjednodušit ověřování validity šablon
  • generovat “source map” – kterým bude rozumět Tracy
  • doplnit podporu pro další knihovny a frameworky, vytvořit návody nebo převodníky pro ostatní šablonovací systémy

Tracy

  • podpora source maps

Web a forum

  • v plánu je změnit navigaci a rozčlenění podle jednotlivých komponent
  • nahradit fórum za nějaké novější, už kvůli bezpečnosti
  • a samozřejmě postupné vylepšování dokumentace jako doposud

Je toho prostě opravdu hodně.

Kdy to bude?

Cílem je vydávat novou velkou verzi každý rok na podzim. To bude možné za předpokladu, že se získá plné financování, o což usiluje nový crowdfundingový program. V případě nenaplnění cílů by byl vývoj značně pomalejší a možnosti limitované, proto tento plán berte jako reálný v případě naplnění cílů.


Spouštíme crowdfundingový program

by David Grudl about a month ago in Nette

Spustili jsme nový crowdfundingový program, jehož cílem je získat finanční prostředky pro vývoj Nette. Hlavní změnou je, že místo jednorázových příspěvků je zaměřen na pravidelnou měsíční podporu. Ta může přicházet jak od jednotlivců, tak od firem, kterým nabízí možnost zviditelnit se na webu Nette a inzerovat na fóru nebo přímo v dokumentaci, tedy v místech s nejlepším zásahem cílové skupiny programátorů.

Každý, kdo staví na Nette, má zájem, aby se framework aktivně vyvíjel. Aby podporoval nové verze PHP. Aby se opravovaly chyby. Aby přicházel s dalšími novinkami, které usnadní práci nebo ušetří čas a peníze. Aby framework měl skvělou dokumentaci a existoval kolem něj užitečný obsah, ať už ve formě článků, návodů nebo videí.

Řada částí Nette představuje světovou špičku a chceme, aby tomu tak bylo nadále.

Bez adekvátního financování se nic z toho nedá zajistit. Přitom abyste se mohli spolehnout, že vyjdou další verze, stačí docela málo: abyste jej každý měsíc podpořili byť jen malou finanční částkou.

Pojďte do toho a staňte se partnerem Nette!

Používá vaše firma Nette?

Pokud pracujete ve firmě, které Nette vydělává peníze, vysvětlete prosím svému šéfovi, že je dobrý nápad se stát partnerem a zajistit tak zdravé fungování projektu, na který spoléháte. Zvýšíte prioritu řešení vašich issues a zároveň zviditelníte svoji společnost v komunitě a přilákáte k sobě vývojáře.

Partnerství totiž přichází s exkluzivními výhodami. Například s uvedením vašeho loga na tomto webu, možností vkládat pracovní nabídky, inzerovat na fóru (ukázka) nebo v dokumentaci (ukázka), tedy na místech se zcela nejlepším zásahem do skupiny Nette vývojářů.

Partnerům vystavujeme faktury, aby si mohli podporu dát do nákladů, a to buď měsíčně, čtvrtletně, půlročně nebo ročně.

Používáte Nette soukromě?

Stojíme také o vaši podporu! Přihlaste se k pravidelným donations přes PayPal. Vaše jméno bude vidět na webu Nette.

Kolik peněz je potřeba?

V tuto chvíli máme stanoveny tři cíle, kterých chceme dosáhnout.

Prvním cílem je 64.000 Kč měsíčně, které zajistí, že se vývoji bude věnovat jeden programátor na půl úvazku. Další vývoj Nette sice bude pokračovat, nicméně polovičním tempem než dosud, což není vůbec ideální. Při dosažení hranice 128.000 Kč získá framework full-time vývojáře a nové verze mohou přicházet každý rok.

Náklady jsou tak nízké proto, že nepotřebujeme kanceláře a hlavně pracujeme na něčem, co nás baví.

Při dosažení třetí mety 196.000 Kč měsíčně budeme moci přizvat další spolupracovníky a vylepšovat tak web, dokumentaci, vytvářet nový obsah a nechat jej překládat do angličtiny. A tak oslovit zahraniční komunitu. Čtvrtá meta dává možnost zapojit druhého programátora, což by vývoj a správu issues značně zrychlilo.

Jakmile se dosáhne tohoto milníku, připravíme další cíle, které by počítaly s více programátory, mohly by vznikat nové užitečné nástroje a knihovny. Pak třeba vznikne i kniha o Nette.


Viz také Freelo.cz: 14 důvodů, proč podpořit Nette


Nette Pro – Magazine 10/2017

by Honza Černý 10 months ago in Nette

Speed ​​up your websites

As you know, Nette Framework has excellent support for easy AJAX websites. So it's a shame that lots of sites built on Nette does not use this opportunity to speed up the web. The library of Vojta Dobeše nette.ajax.js which is currently a little bit old. Another help recently came up the Nittro, which grew up to version 2. Recently we have the Naja library.

Is it possible to try Nette Database without the whole framework, but with the beauty of DI and Tracy? Yes. New example in git repository

Jáchym Toušek (enumag) introduced an extensive package of Arachne libraries that brings some insights from the Symfony world or an alternative view of core Nette components.

In a Nutshell

Contribute – utils – an interesting widget, that can be used by several developers contributte/utils

Nextras – ORM – beta version of upcoming 3 nextras/orm

Dibi – v 3.1.0 dg/dibi/releases/tag/v3.1.0

Milo / Crypt — Simple class for encrypt and decrypt with signature gist/6fe7…813b

David Grudl – How to mock the final classes? https://phpfashion.com/…-final-tridy

In Conclusion

Thanks to partner of edition: Gamee

If you have ideas how to improve our next edition, please let me know. Have I forgotten something? Make sure to email me and we will include it in the next edition. We are still looking for partners who wish to address the growing community interested in our news.

Honza Cerny


Nette Pro – Magazine 9/2017

by Honza Černý 11 months ago in Nette

Support for PHP 7.2 is here!

For all who doesn't know about new type of versions of Nette Framewor 2.4, there is no planed 2.4.x version. All packages have their maintenance version, but Framework doesn’t have. There is build from (2017–08–29) with release notes, that is full compatible with incomming PHP version 7.2

We spent summer together at an extraordinary meeting Nette Camp and two excursions to Czech breweries. Definitely follow up the events next year. It's an interesting way to meet in an offline world. In September, the 90th anniversary Last Saturday is waiting for us.

In a Nutshell

Contribute — Minimalistic integration of Symfony/Console to Nette application contributte/console

Nextras — datagrid v 3.0.0rc nextras/datagrid/releases/tag/v3.0.0-rc2

Nextras — migration v3.0.5 & v3.1rc nextras/migrations/releases/tag/v3.0.5

PeckaDesign — asynchronous components github.com/peckadesign/AsyncControl

Nas — a component for nested selectbox NasExt/DependentSelectBox

In Conclusion

Thanks to partner of edition: www.tajnyprojekt.cz

If you have ideas how to improve our next edition, please let me know. Have I forgotten something? Make sure to email me and we will include it in the next edition. We are still looking for partners who wish to address the growing community interested in our news.

Honza Cerny


PhpStorm and code completion for $this->template

by David Grudl 12 months ago in Nette

How to get rid of PhpStorm alerts on “undefined fields” and activate the code completion for $this->template in presenters?

So how to change this view with the underlined abc and the empty pop-up window:

Into this?

Simply. Just add the following annotation to the presenter (for example to BasePresenter):

/**
 * @property-read \Nette\Bridges\ApplicationLatte\Template|\stdClass $template
 */
abstract class BasePresenter extends Nette\Application\UI\Presenter

Note: In the latest versions of Nette, this annotation will be directly in the code.

Template class

The stdClass class in the annotation is a workaround for PhpStorm, which otherwise treats all variables as undefined. However, it is more interesting to create a class with a real list of the variables that the template uses, including their types. It may look like this:

class ArticleTemplate
{
    /** @var string */
    public $lang;

    /** @var int */
    public $page;

    /** @var string[] */
    public $menu;

    /** @var Model\Page */
    public $article;
}

And then put it in the annotation of a specific presenter instead of stdClass:

/**
 * @property-read ArticleTemplate|\Nette\Bridges\ApplicationLatte\Template $template
 */
final class ArticlePresenter extends Nette\Application\UI\Presenter

From now on, the message is perfect:

We still have to solve the suggestion in the template. So far, Latte plugin can't do it, but once it can, it could use the same template class. For example, there could be a new macro {template App\Presenters\ArticleTemplate} that will pass the template class name.