Gritbox – nadstavba nad Nette sandboxem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
medhi
Generous Backer | 255
+
+4
-

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
+
+2
-

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 parametrykaždé šabloně..

$this->context jsem už neviděl ani nepamatuji. Stopro to smaž. :)

Editoval Beton (16. 4. 2015 13:52)

medhi
Generous Backer | 255
+
0
-

Díky za skvělé připomínky, pokusím se vše implementovat.

medhi
Generous Backer | 255
+
0
-

@PavelJanda Nechtěl bys do https://play.nette.org/ přidat krátkou ukázku použití checkRequirements ?

CZechBoY
Člen | 3608
+
0
-

btw pokud přidáš anotaci @loggedIn tak si nette samo ověří, jestli je uživatel přihlášenej.

K projektu

  1. Radši začni od nette/web-project než od sandboxu.
  2. Kde se kompiluje ten less?
  3. Nedávej tvorbu komponent do BasePresenteru pokud opravdu ta komponenta není všude.
  4. V BaseRepository máš napevno „id“. Nebylo by lepší použít $table->getPrimary()?

Editoval CZechBoY (25. 7. 2015 18:35)

Pavel Janda
Člen | 977
+
0
-

@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
+
0
-

@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
+
0
-

@CZechBoY

@loggedIn zkusím

  1. Proč? Jaký je mezi nimi rozdíl?
  2. LESS se kompiluje v Gruntu dle gruntfile.coffee https://github.com/…tfile.coffee#L13 takže stačí příkaz grunt v rootu projektu.
  3. OK, přihlašovací formulář přesunu do Front modulu
  4. Asi ano.

Editoval medhi (27. 7. 2015 12:27)

chemix
Nette Core | 1310
+
0
-

@PavelJanda checkRequirements standartně kontroluje jen anotaci @User(loggedIn), takže chápu to správně že sis to přepsal na něco „mocnějšího“?

Pavel Janda
Člen | 977
+
0
-

@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.

David Kudera
Člen | 455
+
0
-

medhi napsal(a):

1. Proč? Jaký je mezi nimi rozdíl?

tento

medhi
Generous Backer | 255
+
0
-

@DavidKudera: Přiznám se, že z toho moc nechápu ten rozdíl, můžeš mi to prosím vysvětlit? Navíc se to zdá být experimentální a v nette/sandbox jsou i nějaké aktuálnější commity.

akadlec
Člen | 1326
+
0
-

@chemix ano, když si to potuníš můžeš toho checkovat mnohem více ;)

Pavel Janda
Člen | 977
+
0
-

@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
+
0
-

@medhi promiň, měl jsem dát rovnou odkaz na phpfashion , jen jsem to zapomněl.. Tam je to popsáno více ;-)

medhi
Generous Backer | 255
+
0
-

@DavidKudera Díky. Chápu z toho, že je to pouze minimalistická obdoba Sandboxu, ale jiné výhody nevidím. Sandbox je zdá se naprosto v pořádku a aktuální věc.

chemix
Nette Core | 1310
+
0
-

@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
+
0
-

@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)

chemix
Nette Core | 1310
+
0
-

@PavelJanda muzes pouzit issues na github.com/chemix/planette pro napady o seznamu veci k spusteni jsem nepremyslel, jedine co brani spusteni je zachovani starych odkazu
Nasledne kazdych 14dninrelease novych/upravenych veci

chemix
Nette Core | 1310
+
0
-

@PavelJanda pripadne zde je vlakno : https://forum.nette.org/…sed-on-nette

medhi
Generous Backer | 255
+
0
-

Tak jsem skoro vše implementoval, díky moc za rady.

Haf
Člen | 1
+
0
-

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
+
0
-

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.