Nette Scaffold – generování modelu s CRUD a náležitými presentery

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mikulas Dite
Člen | 756
+
0
-

Nette Scaffold!

https://github.com/…tte-Scaffold

Napsal jsem podle mě docela hezký nástroj na přípravu nette projektů. : )

  • umí stáhnout repozitář sandboxu, nette a připravit projekt nette init
  • připravit presenter, view s parametry a správné šablony nette presenter
  • a především nette model, který vygeneruje model se vším: s parametry, gettery, settery a CRUD pomocí \Nette\Database a také presenter a šablony doplňující CRUD v modelu a SQL pro tvorbu tabulky

Screencast: http://www.screencast.com/t/txWYhA7Q3JQ (jednoduchá instalace, založení projektu a ukázka vygenerování modelu)

Dokumentace: https://github.com/…te-Scaffold/#…

Ukázka modelu: https://gist.github.com/784438 nette model Post label:string text:text views:int=0 published:bool=FALSE

(Doctrine a generování z YAMLu je něco mnohem složitějšího a jiného. Můj scaffold očekává, že jednou model vygeneruje a dál se upravuje přímo.)

Vyki
Člen | 388
+
0
-

Zatím jsem to netestoval, viděl jsem pouze screencast a vypadá to moc pěkně. Už se těším až budu mít čas to otestovat.

Tharos
Člen | 1030
+
0
-

Taky jsem zatím koukal jenom na screencast a vypadá to na hezkou práci.

Jenom mě tak napadlo – nepřemýšlel jsi o zahrnutí nějaké výchozí implementace potvrzování mazání? Když jsem na tom videu viděl, jak položka zmizela po kliknutí na prachobyčejný odkaz, úplně jsem se lekl. Stačil by signál na triviální potvrzovací form (ideálně pak třeba i s protekcí proti CSRF).

To je třeba věc, kterou bych já musel absolutně vždycky všude ručně doplňovat.

Editoval Tharos (19. 1. 2011 10:23)

Honza Marek
Člen | 1664
+
0
-

Ten vygenerovaný model mi nepřijde moc praktický v případě úpravy. Změnu názvu tabulky je potřeba přidat na 4 místech, přidání sloupce taky tak nějak.

mkoubik
Člen | 728
+
0
-

Tharos: +1, navíc neni příjemný, když ti něco smaže google crawler (nebo klidně nějaký vlastní indexátor z jakéhokoliv důvodu).

Mikulas Dite
Člen | 756
+
0
-

Vyki napsal(a):

Zatím jsem to netestoval, viděl jsem pouze screencast a vypadá to moc pěkně. Už se těším až budu mít čas to otestovat.

Díky : )

Tharos napsal(a):

Taky jsem zatím koukal jenom na screencast a vypadá to na hezkou práci.

Jenom mě tak napadlo – nepřemýšlel jsi o zahrnutí nějaké výchozí implementace potvrzování mazání? Když jsem na tom videu viděl, jak položka zmizela po kliknutí na prachobyčejný odkaz, úplně jsem se lekl. Stačil by signál na triviální potvrzovací form (ideálně pak třeba i s protekcí proti CSRF).

To je třeba věc, kterou bych já musel absolutně vždycky všude ručně doplňovat.

mkoubik napsal(a):

Tharos: +1, navíc neni příjemný, když ti něco smaže google crawler (nebo klidně nějaký vlastní indexátor z jakéhokoliv důvodu).

Máte pravdu, to bych mohl přidat.

Honza Marek napsal(a):

Ten vygenerovaný model mi nepřijde moc praktický v případě úpravy. Změnu názvu tabulky je potřeba přidat na 4 místech, přidání sloupce taky tak nějak.

Jo, to je pravda. Název v tabulce se dá dát do konstanty, ale sloupečky bych chtěl dělat úplně jinak. Nerad bych bral název tabulky z názvu třídy, stejně tak jako sloupečky z property.

PJK
Člen | 70
+
0
-

Jo, to je pravda. Název v tabulce se dá dát do konstanty, ale sloupečky bych chtěl dělat úplně jinak. Nerad bych bral název tabulky z názvu třídy, stejně tak jako sloupečky z property.

Když už to má fungovat takhle, tak proč nebrat ty jména z názvů tříd a properties? Mě to naopak připadá jako dost elegantní řešení. Třeba implicitně z názvů, explicitně z konstant. Druhá možnost je řešit to databázovou vrstvou, která sama zmapuje databázi (styl RoR-ActiveRecord). To bych zas nechtěl dělat já :D

Jinak se mi to líbí, ale připomínka k úpravě modelu je správná a dost zásadní…

Mikulas Dite
Člen | 756
+
0
-

Souhlastím, ale to už bych potom spíš použil doctrine. Budu to řešit nějak jednoduše a průhledně.

PJK
Člen | 70
+
0
-

Souhlastím, ale to už bych potom spíš použil doctrine. Budu to řešit nějak jednoduše a průhledně.

Anotace? Samozřejmě ne ve stylu Doctrine (tedy i s definicí typu atd.), ale jen pro „mapování“.

Šaman
Člen | 2635
+
0
-

Luxus, tak tohle ušetří hodně práce.
Ale mám dotaz, dá se nějak nechat vygenerovat model z databáze? Případně z vytvářecího SQL dotazu?

Editoval Šaman (31. 1. 2011 19:37)

Mikulas Dite
Člen | 756
+
0
-

@PJK: To by šlo…

@Šaman: To by bylo pěkné : ) Neumí

Asi to předělám, bude z toho nadstavba nad doctrine…

Šaman
Člen | 2635
+
0
-

trochu OT:

no, i když jsem našel i názory, že databáze slouží jenom jako tupé úložiště, tak jsem zatím zvyklý napřed si jen načrtnout model, pak důkladně připravit databázi (i s FK) a pak zdlouhavě píšu třídy modelu. Tzn, to co už jsem jednou napsal do DB, to teď napíšu ještě třikrát (každou property a pro ni setter a getter). A právě tuhle rutinní práci potřebuji zautomatizovat, tj. říct jen ze kterých tabulek vytvořit třídy a v nich proměnné a set/gettery. Úpravy, speciální třídy aj, si udělám ručně.

Pomůže mi s tímto Nette Scaffold, případně netušíte někdo zda existuje podobný nástroj? Začínám uvažovat o tom, že si ho napíšu sám, ale nechci vynalézat kolo, zvlášť když už někdo jiný možná vynalezl i pneumatiky.

Filip Procházka
Moderator | 4668
+
0
-

Doctrine2 by mělo mít nástroj na generování entit z tabulek, ale osobně mi přijde přímočařejší generovat databázi z entit.

PJK
Člen | 70
+
0
-

Doctrine má svoje kolečko – YAML – DB – Entities – . Mělo by to jít dokola. Co jsem vyzkoušel, tak generování z databáze má dost much, nejlepší je generovat schémaza z entit. V tom souhlasím. Velká výhoda je to, že entity můžou mít libovolného rodiče, takže s trochou magie a reflexe se lze zbavit všech těch getrů a setrů (a přitom automaticky využívat explicitní definice) a připravit spoustu užitečných fcí. No a už jsme prakticky u parametrů scaffoldovacího skriptu – seznam properties. Proto mi zmíněná nadstavba nad Doctrine bez hlubší integrace do frameworku (o kterou nestojím) připadá zbytečná.

Osobně se mi zamlouvá orientace na Nette\Database jako jednoduchý a rychlý nástroj. Tenhle skript by mohl zmenšit objem nudné práce, která je nutná při použití „hloupějších“ nástrojů a knihoven. Vůbec bych se nebál relativně pevně to svázat i s presentery. Pro drobné projekty (např. weby malých podnikatelů apod.) by to mohlo fungovat výborně.

Ped
Člen | 64
+
0
-

PJK: nevim jak v Doctrine2, ale v Doctrine1 z toho kolecka funguje uplne nejlip jenom YAML → DB/entity. Ostatne konverze jsou neuplne. (entity->db jeste ujde, ale delat pak nad tim automaticke migracni skripty pres diff tool moc dobre nejde, nakonec jsem to musel vyresit generovanim YAML a to jsem si musel sam fixovat)

Kazdopadne vetsina vyvojaru Doctrine pouziva pro definice YAML, takze tahle cesta je i nejlip odladena. (a mne se YAML nelibi, tak mam smulu)

Droid
Člen | 92
+
0
-

Huh, zrovna mě něco takového napadlo, že si vytvořím na presentery + templates. Takže díky moc, je to super :-) Úspěšně vyzkoušeno pod linuxem.
Akorát tedy, kde se bere proměnná $content? Při geenrování presenteru a šablon se vše provede jak má, jen to ale vypíše

PHP Notice:  Undefined variable: content in /usr/bin/nette.php on line 270

Editoval Droid (8. 3. 2011 0:11)

Mikulas Dite
Člen | 756
+
0
-

Tam bude nějakej bug… Popravdě se mi to už moc nelíbí; buď to radikálně přepíšu, nebo něco na ten způsob.

Droid
Člen | 92
+
0
-

No, jde o to, že v předchozích řádcích (<270) vůbec o $content není ani zmínka. Ale nevadí, i tak to funguje. Radikálně? A co by to mělo všechno umět? Nebo jsi s funkcionalitou spokojen, jen se ti nelíbí ten kód?

Mikulas Dite
Člen | 756
+
0
-

Nelíbí se mi ty modely a nahrávání do databáze. Na to je tady Doctrine, ale ta zase neumí generovat k těm modelů i CRUD presentery a formuláře. Možná z toho nakonec vznikne nějaký callback ke generování z yamlu…

CuchulainMacLugh
Člen | 18
+
0
-

Pokračuje tento hezký projekt nějak?