Nette Scaffold – generování modelu s CRUD a náležitými presentery
- Mikulas Dite
- Člen | 756
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.)
- Tharos
- Člen | 1030
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
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.
- Mikulas Dite
- Člen | 756
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
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
Souhlastím, ale to už bych potom spíš použil doctrine. Budu to řešit nějak jednoduše a průhledně.
- Mikulas Dite
- Člen | 756
@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 | 2667
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
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
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
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
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
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.
- Mikulas Dite
- Člen | 756
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…