Gritbox – nadstavba nad Nette sandboxem
- medhi
- Generous Backer | 255
Ahoj,
pro vlastní účely jsem si udělal trochu vylepšený Nette Sandbox.
https://github.com/gritbox/gritbox
Gritbox obsahuje aktuální Nette Sandbox, ale navíc již řeší:
- Základní správu uživatelů: Login, Registrace, zaslání zapomenutého hesla
- ACL nastavovatelné skrz config.neon a anotace v presenterech
- Lepší flashmessage (vždy viditelné nahoře)
- Použití modulů (Front a Admin)
- SLužbu pro odesílání e-mailů včetně responsivní šablony
- Pro pohodlný vývoj e-mailů je nainstalovaný MailPanel od Jana Drábka
Dále jsou nainstalovány tyto technologie:
- Bootstrap (CSS framework)
- Grunt (Javascript Task Runner, zkompiluje LESS a jednotlivé JS skripty vždy do jednoho souboru)
- LESS (CSS pre-processor)
- jQuery (Javasript framework)
- Bower (Package manager)
Není to CMS, ale je to základ, který vždy opakovaně musím připravit, když dělám nový projekt. Třeba se bude hodit.
Rád bych, aby Gritbox sloužil také jako ukázka best practices pro začátečníky.
Pokud najdete nějaké chyby, rád je opravím, vítány jsou i PR.
Editoval medhi (28. 7. 2015 16:29)
- Pavel Janda
- Člen | 977
Bylo by určitě „hezčí“ držet moduly v adresáři
modules
, aby se na to dalo trošku koukat.
K autorizaci v Nette slouží metoda checkRequirements
jakéhokoliv objektu dědícího od Nette\Application\UI\Presenter
.
Spouští se ještě před metodou startup
. Toto si mi zdá
nevhodné:
protected function startup()
{
parent::startup();
$this->mustBeLoggedIn();
}
Rozumím tomu, že jsi chtěl vyrobit něco univerzálního. na druhou stranu, když už tam máš přihlášení, tak má určitě cenu přidat nějaké lehoučké ACL. Osobně to používám v každé první aplikaci. Též tím nasměruješ začátečníky správným směrem.
Taky si myslím, že ne každý Presenter v tvém sandboxu má obsahovat továrničku na signInForm.
Když už jsme u těch továrniček, doporučuji tento postup. Člověk si může dát továrnu na přihlašovací formulář na front a použít tentýž potom třeba i na adminu.
protected function beforeRender()
{
$this->template->parameters = $this->context->parameters;
}
No, určitě najdeš dost argumentů (zde na fóru), proč toto nepoužívat. Pokud potřebuješ nějaké konkrétní data z configu, tak si je předej, neb o si vytvoř službu, která ti jich pár předá. Vsadím se ale, že nebudeš potřebovat všechny parametry v každé šabloně..
$this->context
jsem už neviděl ani nepamatuji. Stopro to
smaž. :)
Editoval Beton (16. 4. 2015 13:52)
- medhi
- Generous Backer | 255
@PavelJanda Nechtěl bys do https://play.nette.org/ přidat krátkou
ukázku použití checkRequirements
?
- CZechBoY
- Člen | 3608
btw pokud přidáš anotaci @loggedIn tak si nette samo ověří, jestli je uživatel přihlášenej.
K projektu
- Radši začni od nette/web-project než od sandboxu.
- Kde se kompiluje ten less?
- Nedávej tvorbu komponent do BasePresenteru pokud opravdu ta komponenta není všude.
- V BaseRepository máš napevno „id“. Nebylo by lepší použít $table->getPrimary()?
Editoval CZechBoY (25. 7. 2015 18:35)
- Pavel Janda
- Člen | 977
@medhi Jo když mi řekneš, jak se to dělá, tak tam můžu dát ukázku kompletní implementace ACL postavené nad web-projectem.
- medhi
- Generous Backer | 255
@PavelJanda Super. https://play.nette.org/ → Login → Edit → Create new article.
Díky moc
Editoval medhi (27. 7. 2015 11:04)
- medhi
- Generous Backer | 255
@CZechBoY
@loggedIn zkusím
- Proč? Jaký je mezi nimi rozdíl?
- LESS se kompiluje v Gruntu dle gruntfile.coffee https://github.com/…tfile.coffee#L13 takže stačí příkaz grunt v rootu projektu.
- OK, přihlašovací formulář přesunu do Front modulu
- Asi ano.
Editoval medhi (27. 7. 2015 12:27)
- Pavel Janda
- Člen | 977
@chemix Ano, jistě. Mocnější to být musí a metoda
Presenter::checkRequirements
je ta správná, která by to
měla řešit.
Večer na to mrknu.
- Pavel Janda
- Člen | 977
@medhi Něco jsem v rychlosti sepsal a nahrál to semka. Pokud najdete jakoukoliv chybu, dejte mi, prosím, vědět. Doma si to projdu, teď je to takový 95% nástřel.
@chemix Předpokládám, že to teprve nějaký moderáto musí projít, aby to bylo vidět na homepage play? Překlad bude chvíli potom, co doladím tuto verzi.
- David Kudera
- Člen | 455
@medhi promiň, měl jsem dát rovnou odkaz na phpfashion , jen jsem to zapomněl.. Tam je to popsáno více ;-)
- chemix
- Nette Core | 1310
@medhi defakto jo, sandbox uz take nahradil „nette/nette“: „~2.3“ za vypis komponent
Ty tam stejne davas jeste vice funkcionakity takze je imho jedno odkud zacinas
@PavelJanda je tam zaskrtavatko „draft“ nasledne ne to dohledavatelne, princip zobrazovani na homepage je tusim podle „hvezdicek“
- Pavel Janda
- Člen | 977
@chemix Lze někde dohledat, nebo se doptat, jaké máte plány s play.nette.org? Myslím, co všechno se bude přidělávat/předělávat, než nastane ofiko verze?
Ptám se proto, že bych rád viděl všechna témata/články pohromadě. Mohl bych tam přepisovat stávající prošlé články (příklad tuším k Nette 0.9), nebo psát nové k tématům, které tam nejsou.
Editoval Pavel Janda (28. 7. 2015 8:18)
- Haf
- Člen | 1
Ahoj, začínám s Nette (OOP,MVC) a za Gritbox moc díky! Je to obrovská pomoc do začátku.
Jako začátečník si dovolím upozornit na možné problémy se kterými jsem se zatím setkal. V předchozí verzi na mě křičela laděnka, dokud jsem nepřidal do databáze → do tabulky user → sloupec hash, dal jsem varchar(20) jako ma hash v tabulce passwordreset. Teď jsem si stáhl novější verzi a tato chyba už se neobjevuje, ale stále nevím jestli tam ten sloupec má být nebo ne :)
Pak jedna malá oprava v souboru app\modules\Front\presenters\SignPresenter.php r52 $form->getPresenter()->redirect(‚:Admin:Sign:in‘); asi by mělo být :Front:Sign:in ?
A zatím poslední věc na co jsem narazil, ale neumím se s tím poprat. V novější verzi je oddělená šablona pro CSS+JS v souboru app\components\HtmlAssets\HtmlAssets.latte a mělo by to umět minifikovat CSS+JS přes Gruntfile.coffee. Nejsem schopen vydedukovat kde nastavit aby se generovaly správné cesty.Grunt konzole mi hlásí Configuration is now: concat: files: src: ‚app\\components\\HtmlAssets\\www\\style\\main.css‘, správně by to mělo být asi jen www\\style\\main.css ? Prostě to vypadá že si ten config vzal tu cestu k tomu HtmlAssets a nejde se toho zbavit. Studoval jsem i návod od chemixe https://pla.nette.org/…-with-usemin i stránky na githubu, ale on to tam má udělané trochu jinak a v useminPrepare: i removeFromPath: používá stejnou cestu k šabloně app/templates, tak nevím jestli to jde takto vůbec použít. Zkoušel jsem i obrátit lomítka podle rady na \\ protože jsem na windowsech, ale bez výsledku. Můžete na to někdo mrknout prosím ? Ono by se bez toho gruntu dalo žít. Já jsem to do teď vlastně ani nepoužíval, na minifikaci stylů mám WinLess, ale když už by to umělo, tak si říkám proč ne :)
Ještě jsem si všiml že v $developmentMode to ve zdrojáku generuje
<!-- build:css /my- app/www/style/app.min.css -->
<!-- build:css {$basePath}/style/app.min.css -->
je tam mezera, mělo by být /my-app/, ale je to jen u toho <!--
build:css … v <link> uz je to dobre …
<link rel=„stylesheet“ media=„screen“
href=„{$basePath}/style/main.css“ type=„text/css“>
<link rel=„stylesheet“ media=„screen“
href=„/my-app/www/style/main.css“ type=„text/css“>
Zatím vše, ještě se určitě budu posléze ptát jak vylepšit zabezpečení při Loginu do Admin sekce, ale to ještě nemám nastudované.
Díky ahoj Haf.
Editoval Haf (6. 8. 2015 0:01)
- medhi
- Generous Backer | 255
Haf napsal(a):
Ahoj, začínám s Nette (OOP,MVC) a za Gritbox moc díky! Je to obrovská pomoc do začátku.
Ahoj, to jsem moc rád!
Jako začátečník si dovolím upozornit na možné problémy se kterými jsem se zatím setkal. V předchozí verzi na mě křičela laděnka, dokud jsem nepřidal do databáze → do tabulky user → sloupec hash, dal jsem varchar(20) jako ma hash v tabulce passwordreset. Teď jsem si stáhl novější verzi a tato chyba už se neobjevuje, ale stále nevím jestli tam ten sloupec má být nebo ne :)
nemá, ale něco tam bylo, odstranil jsem to.
Pak jedna malá oprava v souboru app\modules\Front\presenters\SignPresenter.php r52 $form->getPresenter()->redirect(‚:Admin:Sign:in‘); asi by mělo být :Front:Sign:in ?
mělo, opraveno.
A zatím poslední věc na co jsem narazil, ale neumím se s tím poprat. V novější verzi je oddělená šablona pro CSS+JS v souboru app\components\HtmlAssets\HtmlAssets.latte a mělo by to umět minifikovat CSS+JS přes Gruntfile.coffee. Nejsem schopen vydedukovat kde nastavit aby se generovaly správné cesty.Grunt konzole mi hlásí Configuration is now: concat: files: src: ‚app\\components\\HtmlAssets\\www\\style\\main.css‘, správně by to mělo být asi jen www\\style\\main.css ? Prostě to vypadá že si ten config vzal tu cestu k tomu HtmlAssets a nejde se toho zbavit. Studoval jsem i návod od chemixe https://pla.nette.org/…-with-usemin i stránky na githubu, ale on to tam má udělané trochu jinak a v useminPrepare: i removeFromPath: používá stejnou cestu k šabloně app/templates, tak nevím jestli to jde takto vůbec použít. Zkoušel jsem i obrátit lomítka podle rady na \\ protože jsem na windowsech, ale bez výsledku. Můžete na to někdo mrknout prosím ? Ono by se bez toho gruntu dalo žít. Já jsem to do teď vlastně ani nepoužíval, na minifikaci stylů mám WinLess, ale když už by to umělo, tak si říkám proč ne :)
máš pravdu, nefungovalo to, opraveno změnou cesty v pluginu netteBasePath
Ještě jsem si všiml že v $developmentMode to ve zdrojáku generuje
<!-- build:css /my- app/www/style/app.min.css -->
<!-- build:css {$basePath}/style/app.min.css -->je tam mezera, mělo by být /my-app/, ale je to jen u toho <!-- build:css … v <link> uz je to dobre …
<link rel=„stylesheet“ media=„screen“ href=„{$basePath}/style/main.css“ type=„text/css“>
<link rel=„stylesheet“ media=„screen“ href=„/my-app/www/style/main.css“ type=„text/css“>
Tohle zvláštní, proměnná je to stejná, proč by vedle to mělo generovat jinak… ještě se na to zkusím podívat.
Zatím vše, ještě se určitě budu posléze ptát jak vylepšit zabezpečení při Loginu do Admin sekce, ale to ještě nemám nastudované.
Díky ahoj Haf.
Určitě se ptej, mělo byt sloužit tak, aby začátečník to uměl nahodit a já už to neumím tak dobře posoudit.