Vydání Nette 2.1 do konce roku s maximálním zachováním BC
- David Grudl
- Nette Core | 8218
Š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 | 2659
David Grudl napsal(a):
Šlo mi jen o automatické volání inject metod, které se vždy dá zapnout v konfigu pomocí
inject: true
nebosetup: [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á.
- enumag
- Člen | 2118
@bazo: see https://forum.nette.org/…lude-without
Editoval enumag (6. 11. 2013 20:28)
- enumag
- Člen | 2118
@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)
- Milo
- Nette Core | 1283
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
neboNette\Forms\Form
?MyForm
,Test\MyForm
neboMyApp\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
@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
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
@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)
- Filip Procházka
- Moderator | 4668
Pokud bude chování v annotacích identické s chováním phpka, tak v tom žádný problém nevidím.
- bazo
- Člen | 620
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
@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)
- Jan Tvrdík
- Nette guru | 2595
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
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 | 8218
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
@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 | 8218
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
@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.
- David Grudl
- Nette Core | 8218
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
Ž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.
- David Matějka
- Moderator | 6445
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 | 2659
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 | 8218
Označil a vydal jsem 2.1.0 RC. Více info https://forum.nette.org/…-rc-released
- David Grudl
- Nette Core | 8218
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\Configurator
→Nette\Configurator
(zvažuji, zda nedat do fw obě třídy)Nette\Database\Connection
→Nette\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\PhpGenerator
→Nette\PhpGenerator
Nette\Config\CompilerExtension
→Nette\DI\CompilerExtension
- Jan Tvrdík
- Nette guru | 2595
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í)
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Stačí v podstatě změnit:
Nette\Config\CompilerExtension
→Nette\DI\CompilerExtension
Takže přestanou fungovat všechny doplňky, které mají extension. Dík.
- Majkl578
- Moderator | 1364
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é.
- motorcb
- Člen | 552
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
@motorcb: To znamená, že verze 2.2 (master, @dev) je vyvíjena paralelně s přípravou verze 2.1.0.
- David Grudl
- Nette Core | 8218
@hrach: co se změnilo v tom backjoin api a group()? Alespoň jednou větou.
- Caine
- Člen | 216
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 *