Vydání Nette 2.1 do konce roku s maximálním zachováním BC

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8227
+
0
-

Šlo mi jen o automatické volání inject metod, které se vždy dá zapnout v konfigu pomocí inject: true nebo setup: [injectMethod]. Týká se to teda i property s anotací @inject.

U presenterů by to fungovalo automaticky nadále.

Šaman
Člen | 2661
+
0
-

David Grudl napsal(a):

Šlo mi jen o automatické volání inject metod, které se vždy dá zapnout v konfigu pomocí inject: true nebo setup: [injectMethod]. Týká se to teda i property s anotací @inject.

U presenterů by to fungovalo automaticky nadále.

To ano, ale bude možnost nastavit tu automatiku globálně, třeba v bootstrapu při vytváření kontejneru? Jestli se s tím automatickým injectováním do budoucna počítá, tak by to zvýšilo kompatibilitu se současnou @dev a kdo o této možnosti neví, tomu nijak neublíží. A kdo ví, ten už by měl vědět co dělá.

bazo
Člen | 620
+
0
-

David Grudl napsal(a):

  • vypustil zkrácené {#block}

preco? v dev verzii to ostane?

enumag
Člen | 2118
+
0
-

@bazo: see https://forum.nette.org/…lude-without

Editoval enumag (6. 11. 2013 20:28)

enumag
Člen | 2118
+
0
-

@DG: Důkladně jsem si prošel svůj seznam co bych v Nette chtěl a vyfiltroval co bych ve 2.1 rád viděl vyřešené. Většinu věcí jsem ale i tak vypustil protože buď nejsou tak horké nebo je na ně pozdě. Zbylo mi tohle:

DIC factories

Generované továrny jsou sice fajn, ale potřebovaly by vyřešit dva drobné neduhy abych je považoval za připravené pro stable verzi:

Automatické přidávání parametrů – https://github.com/…e/issues/873.

Zohlednění use statements – Uvádění celého typu včetně namespacu v anotaci @return mi dost vadí, zvykl jsem si používat use na všechno (stejně jako to dělá symfony). Navíc mi to IDE furt opravuje a pak to hází výjimky. Pokud jde o implementaci tak doctrine/annotations to umí.

Autorizátor a identita

(Chápu že jsem s tím asi už otravný.) Přemýšlel jsem nad tím a tvůj koncept imho nedává úplně smysl dokud v Nette není nativně možnost oddělené autentizace pro různé sekce (typicky moduly), existuje jen nějaké extension MultiAuthenticator a moc se mi nelíbí. Když bych to potřeboval tak bych zřejmě vytvořil druhou službu typu Nette\Security\User a Nette\Http\UserStorage (s jinak nastaveným setNamespace) + samozřejmě druhý Authenticator a Authorizator. (<OT>Je už v extensions funkční a někde zdokumentovaný lokální autowiring?</OT>)

Pro tuto chvíli mi dává smysl ta identita s tím že se později přepíše autentizace i autorizace nebo alespoň přidá lepší podpora pro více authenticatorů. Jsi-li ochotný ten můj PR mergnout, dej vědět ale ještě s tím počkej. Jsou tam dvě drobnosti které bych musel fixnout.

Editoval enumag (6. 11. 2013 22:13)

Šaman
Člen | 2661
+
0
-

Zohlednění use statements: +1 (Také jsem na to narazil, nejen u return, ale i u property injection. To, že to nefunguje je pro člověka, který tuhle vlastnost nezná dost WTF hledání problému.)

Milo
Nette Core | 1283
+
0
-

enumag napsal(a):
Zohlednění use statements – Uvádění celého typu včetně namespacu v anotaci @return mi dost vadí, zvykl jsem si používat use na všechno (stejně jako to dělá symfony). Navíc mi to IDE furt opravuje a pak to hází výjimky. Pokud jde o implementaci tak doctrine/annotations to umí.

Také jsem potřeboval a v nadšení jsem to implementoval jako samostatnou třídu AliasExpander. Po čase jsem samozřejmě zjistil, že to řešil kde kdo a v principu všichni stejně.

Ale nasazení je hodně o BC. Představte si kód:

namespace Test;

use MyApp\MyForm;

class Foo
{
	/**
	 * @return Nette\Forms\Form
	 * nebo
	 * @return MyForm
	 */
	public function createForm()
	{
	}
}

Když se „zapne“ uplatnění namespace a aliasu v anotacích, co tedy metoda vrací?

  • Test\Nette\Forms\Form nebo Nette\Forms\Form?
  • MyForm, Test\MyForm nebo MyApp\MyForm?

aneb těžko odhadnout co autor myslel. Musela by se zavést nějaká konvence, například:

  • absolutní název třídy v anotaci vždy začína \ (backslash), zbytek se expanduje
  • expanduje se pouze ClassName::class (à la PHP 5.5), na zbytek se nesahá
  • nebo něco jiného

Podle mého, tohle do stable nepatří.

enumag
Člen | 2118
+
0
-

@Milo: Mýlíš se. Jak by to mělo fungovat je naopak naprosto zřejmé – úplně stejně jako kdekoli jinde ve zdrojáku, cokoli jiného by bylo totální WTF.

Konkrétně tedy:

namespace Test;
use MyApp\MyForm;
/**
 * @return MyForm
 */
// vrací MyApp\MyForm
namespace Test;
use MyApp\MyForm;
/**
 * @return Nette\Forms\Form
 */
// vrací Test\Nette\Forms\Form
namespace Test;
use MyApp\MyForm;
use Nette;
/**
 * @return Nette\Forms\Form
 */
// vrací Nette\Forms\Form

Cokoli s \ na začátku by samozřejmě zůstalo beze změny.

Trochu BC break to samozřejmě je, ale v podstatě jen oproti aktuální 2.1-dev, ve 2.0 se ty anotace pokud vím využívají jen v sekci factories: a to ve 2.0 používal málokdo. Proto myslím že by se tato změna měla udělat nyní protože BC break oproti dev verzi tolik nevadí. Kromě toho když máš název třídy absolutně, měl bys psát lomítko na začátku vždy protože to jinak ani IDE nepochopí.

Editoval enumag (7. 11. 2013 10:54)

MartinitCZ
Člen | 580
+
0
-

Zohlednění use statements: Rozhodně jsem proti. Podle mne tam patří třída včetně namespaces (tzv. celý název):

  • @return \Nette\Utils\Html – ANO
  • @return Html – NE
enumag
Člen | 2118
+
0
-

@martinit: Zohlednění use statements ti naprosto nijak nebrání používat první variantu. Nikdo tě nenutí používat tu druhou, je to jen sjednocení zápisu tříd v anotacích se zápisem kdekoli jinde pro ty kteří to ocení. Všechna mě známá IDE se tak chovají.

Editoval enumag (7. 11. 2013 10:55)

Milo
Nette Core | 1283
+
0
-

@enumag: Pravdou je, že továrny jsem použil párkrát a IDE používám zřídka. A ani nevím jak moc správně lidé anotace píšou. Chtěl jsem jen poukázat na možný BC break, v praxi půjde zřejmě jen o to zpětné lomítko na začátku.

bazo
Člen | 620
+
0
-

ja vam neviem ale bezne pouzivam generovane tovarnicky takto

namespace App\Components\Factories;

use App\Components\AttributeForm;

interface AttributeFormFactory
{
	/** @return AttributeForm */
	public function create();

}

co v pohode funguje, aj netbeans mi nasepkava

enumag
Člen | 2118
+
0
-

@bazo: A jak vypadá konfigurace té factory v neonu? ;-)

Filip Procházka
Moderator | 4668
+
0
-

Pokud bude chování v annotacích identické s chováním phpka, tak v tom žádný problém nevidím.

bazo
Člen | 620
+
0
-

enumag napsal(a):

@bazo: A jak vypadá konfigurace té factory v neonu? ;-)

tak tam uz su zamozrejme cele namespacy, ale to nie je problem, kedze je to copy paste a autocomplete. ale neviem ako by to mohlo inak fungovat

attributeForm:
	class: App\Components\AttributeForm
	implement: App\Components\Factories\AttributeFormFactory
enumag
Člen | 2118
+
0
-

@bazo: Všimni si že ten návratový typ máš duplicitně v anotaci i v neonu. Když by byly zohledněné use statements tak by se návratový typ vyčetl z anotace a stačilo by tohle:

attributeForm:
    implement: App\Components\Factories\AttributeFormFactory

Pokud by sis ten řádek chtěl ušetřit teď tak bys tu anotaci musel mít včetně namespacu protože Nette to use nebere v úvahu.

Editoval enumag (7. 11. 2013 13:49)

bazo
Člen | 620
+
0
-

tak takto to je, potom suhlasim.

potom by sa mohlo rovno pisat

factories:
	attributeForm: App\Components\Factories\AttributeFormFactory

ako pri sluzbach

Editoval bazo (7. 11. 2013 14:01)

Eda
Backer | 220
+
0
-

Mít podporu pro use statementy v generovaných továrnách a injectovaných proměnných by bylo fakt super a ušetřilo by to dost práce.

Tohle je jedna z mála věci, kterou má Nette hůř pořešenou než konkurence.

bene
Člen | 82
+
0
-

Na use jsem zrovna narazil min. tyden a chtěl jsem to napsat do requirements ;-)

Milo
Nette Core | 1283
+
0
-

Zpěk k Davidovu postu… Moc rád bych uvolnění stable verze klidně bez všech fičur co jsi vypsal. Propast mezi 2.0 a 2.1 se stále pomalu zvětšuje a já si nikdy nejsem jistý, jestli to mohu použít s ohledem na budoucí vývoj.

Jan Tvrdík
Nette guru | 2595
+
0
-

Milo wrote: Moc rád bych uvolnění stable verze klidně bez všech fičur co jsi vypsal.

Souhlas, přesně o to jsem se snažil před rokem.

Možná by nebylo od věci odkázat na https://doc.nette.org/…tions/to-2-1, když už to bylo před časem sepsáno.

mrtnzlml
Člen | 140
+
0
-

Také se psalo o podpoře REST služeb v Nette 2.1. Už se na to úplně zapomnělo? Stejně tak je CliRouter stále údajně experimental

David Grudl
Nette Core | 8227
+
0
-

Takže diskuse, co z masteru odebrat, aby se mohla vydat 2.1, se zvrhla v diskusi co ještě všechno přidat :-) Přidávat se bude pořád, dokud bude Nette existovat. To teď neřešme.

enumag
Člen | 2118
+
0
-

@DG: Co z masteru odebrat jsi vyjmenoval velmi dobře takže asi málokdo považoval za nutné se k tomu vyjadřovat. :-) Mě osobně nejde o přidávání nových funkcí (až na autorizátor, ale ten je dávno připravený), ale o drobné doladění DIC factories.

Vše ostatní jako REST, zabezpečené signály nebo oddělení vytváření odkazů od presenteru jsem záměrně nezmínil protože to není připravené. To bychom tu verzi nevydali nikdy.

Editoval enumag (8. 11. 2013 23:41)

David Grudl
Nette Core | 8227
+
0
-

Připravil jsem Nette Framework 2.1.0 RC (Github, distribuce).

Kompletní popis změn zatím neexistuje (nejblíž k němu má https://doc.nette.org/…tions/to-2-1), nicméně tato verze slouží spíš k připomínkování pro insidery.

Do finální verze bych chtěl ještě přejmenovat Nette\Database\SelectionFactory. Ale nechtěl bych už přidávat nic, co by odkládalo vydání.

enumag
Člen | 2118
+
0
-

@DG:

Tzn. ty věci co jsem říkal k DIC factories ani autorizátor zřejmě nebudou. Imho na to vydání najednou až moc spěcháš, ale nezbývá mi než to respektovat.

V každém případě bych alespoň rád tvé vyjádření k těmto pull requestům. Všechny jsou imho připravené k mergnutí takže vydání verze 2.1 se tím neoddálí. (Pokud si u některého z nich myslíš že by vydání oddálil, řekni.)
https://github.com/…te/pull/1272
https://github.com/…te/pull/1238
https://github.com/…te/pull/1231
https://github.com/…te/pull/1219

Taky jsi chtěl nějak řešit tohle.

xificurk
Člen | 121
+
0
-

Ugh, ten revert změn okolo formulářů (zejména validace) teda bolí…

David Grudl
Nette Core | 8227
+
0
-

Proč bolí? Jde mi o co největší kompatiblitu s 2.0. Aby přechod byl bezproblémový.

Pull requesty ještě projdu.

Honza Marek
Člen | 1664
+
0
-

Že jsem tak smělý, v té 2.1 bude jaké preferované injectování servis do presenteru? @inject, injectBlabla(…) nebo oboje? Trochu se v tom ztrácim.

hrach
Člen | 1838
+
0
-

pouze constructor. injektovani pres zminene bude defaultne vypnute,takze bych to oznacil za nepreferovane.
blbe ctu

Editoval hrach (21. 11. 2013 2:19)

David Matějka
Moderator | 6445
+
0
-

v presenterech pude stale pouzivat inject* metody i @inject anotace, viz https://github.com/…rFactory.php#L66

vypnuto bylo pouze injectovani timhle zpusobem do sluzeb

edit: k tomu co je preferovano: samozrejme, nejlepsi je konstruktor injection. pri ruznem dedeni atd. by ale pekne rychle vznik depedency hell. pokud si dobre vzpominam, tak David rikal, ze preferovanym zpusobem budou @inject anotace, inject metody vsak zustanou stale podporovane. alternativne muzes pouzit kdyby/autowired coz jsou chytrejsi @inject anotace

Editoval matej21 (20. 11. 2013 14:27)

Šaman
Člen | 2661
+
0
-

I do služeb to má své opodstatnění, i když jen ve specifických případech. Byl bych rád, kdyby ta možnost zůstala, nebo šla alespoň nějak explicitně zapnout. Já to používám u Base* tříd, když nechci zaplácat konstruktor takovými věcmi, které potřebuji vždy (u mě TemplateLocator). Druhá možnost by byla tahat to skryté z kontejneru, ale k tomu bych se nerad vracel…


Jan Tvrdík: Diskuse o Base třídách pokračuje jinde.

Editoval Jan Tvrdík (21. 11. 2013 16:44)

David Grudl
Nette Core | 8227
+
0
-

Označil a vydal jsem 2.1.0 RC. Více info https://forum.nette.org/…-rc-released

Jan Tvrdík
Nette guru | 2595
+
0
-

To abychom k tomu napsali dokumentaci, co?

David Grudl
Nette Core | 8227
+
0
-

Venku je RC2. Asi krom jediné věci (UI\Control::createTemplate) jsem s ní spokojen a vidím v ní podstatný pokrok oproti 2.0. Přitom s přechodem z 2.0 by neměl být problém. Stačí v podstatě změnit:

  • Nette\Config\ConfiguratorNette\Configurator (zvažuji, zda nedat do fw obě třídy)
  • Nette\Database\ConnectionNette\Database\Context
  • Message::send()Mailer::send($message)
  • při manuálním vykreslování formuláře dát pozor na Checkbox a nezapomenout na chybové zprávy u jednotlivých inputů
  • Nette\Utils\PhpGeneratorNette\PhpGenerator
  • Nette\Config\CompilerExtensionNette\DI\CompilerExtension
Jan Tvrdík
Nette guru | 2595
+
0
-

Co se týče configuratoru, tak jsem si vždycky říkal jestli by nedávalo ji smysl tu třídu rozdělit na obecný configurátor a od něj by dědil nette-specific configurátor (getDefaultParameters, enableDebugger, createRobotLoader, registrace konkrétních extenzí)

enumag
Člen | 2118
+
0
-

@Jan Tvrdík++

MartinitCZ
Člen | 580
+
0
-

Škoda, že se do 2.1 konečně nedostane něco jako LinkFactory od Jan Tvrdík.

Honza Marek
Člen | 1664
+
0
-

David Grudl napsal(a):

Stačí v podstatě změnit:

  • Nette\Config\CompilerExtensionNette\DI\CompilerExtension

Takže přestanou fungovat všechny doplňky, které mají extension. Dík.

Majkl578
Moderator | 1364
+
0
-

Honza Marek napsal(a):

Takže přestanou fungovat všechny doplňky, které mají extension. Dík.

Je fakt, že je to jeden z úplně zbytečných BC breaků, nicméně řešení kompatibility je poměrně snadné.

hrach
Člen | 1838
+
0
-

Ohledne te NDB, neni to tak optimisticke, jak si, Davide, napsal. Treba backjoin api je nove :)

David Grudl
Nette Core | 8227
+
0
-

@hrach: a mohl bys připravit stručnou migration guide?

hrach
Člen | 1838
+
0
-

Tak co jsem si ted udelal diff na database slozkou, tak to vypada na zakladni oblasti:

  • backjoin api
  • kompozice vs. dedicnost
  • context, a rename puvodnich metod z pdo
  • selection::group() ma nyni selection::having()
motorcb
Člen | 552
+
0
-

Co znamená verze 2.2.x – https://packagist.org/…/nette/nette když ještě není hotova ani 2.1.x?
My co jedeme na „nette/nette“: "@dev" mame trochu více problémů :-)

Jan Tvrdík
Nette guru | 2595
+
0
-

@motorcb: To znamená, že verze 2.2 (master, @dev) je vyvíjena paralelně s přípravou verze 2.1.0.

David Grudl
Nette Core | 8227
+
0
-

@hrach: co se změnilo v tom backjoin api a group()? Alespoň jednou větou.

enumag
Člen | 2118
+
0
-

@dg: Backjoin API: dvojtečka se píše před název tabulky místo mezi název tabulky a název sloupce. Metoda group měla dříve dva argumenty $group a $having, nyní má jen jeden + přibyla metoda having.

Editoval enumag (17. 12. 2013 23:32)

vvoody
Člen | 910
+
0
-

before

$connection->table('book')->where('book_tag:tag.name', $tag);

after

$context->table('book')->where(':book_tag.tag.name', $tag);
Caine
Člen | 216
+
0
-

U NDB jste ještě zapomněli na docela zásadní BC break, a to, že u ActiveRow nelze nastavit nové hodnoty záznamu a pak dát jen update():

2.0:

$row->some_column = 'some new value';
$row->update(); //note: provede se jen update

2.1:

$row->update(array('some_column' => 'some new value')); //note: provede update a vzapeti hned select *
hrach
Člen | 1838
+
0
-

jop, to jsem chtel napsat a zapomnel. diky.