K cemu je dobry Grunt + Bower (+ Yeoman)

LeonardoCA
Člen | 296
+
+9
-

Konecne jsem se dostal k tomu testnout spojeni Grunt + Bower + Nette. Nejaky zaklad uz tady je popsany v clanku Nette a grunt, proto to zkusim pojmout trochu jinak a nastinit dalsi moznosti.

Co je to Bower a k cemu je dobry?

Na to je jednoducha odpoved, pokud pouzivate Composer. Bower ~ Composer
Bower resi jen a pouze zavislosti primarne javascriptovych knihoven, ale vyuziva se obecne pro frontend assets, tj nejen js, ale i balicky css/less/sass/fonts/icons, atp.

Tj bower nam usnadni instalaci a update knihoven pro frontend projektu tak, aby spolu fungovaly a bylo je snadne aktualizovat, pokud mozno bez nutnosti reseni konfliktu.

Dulezite je si uvedomit, ze pri primem porovnani Bower < Composer, na rozdil od composeru bower totiz resi opravdu jen zavislosti, nic vic a nic min. Sam o sobe vam do projektu nainstalovane knihovny nijak smysluplne neprida. Na rozdil od composeru, ktery ma autoloader a veskere php knihovny jsou po spusteni composer install vicemene pripraveny k okamzitemu pouziti. Bower samotny nic takoveho neumi.

Duvodem je, ze udelat neco jako autoloader pro frontend neni tak jednoduche a jednoznacne jako ekvivalent na strane php.

Co s tim? A proc vubec pouzivat Bower a Grunt, kdyz uz mame Webloader nebo Assetics?

Odpoved je podobne jako v pripade proflakle odpovedi na Ultimatni otazku zivota, vesmiru a vubec vseho dost nejednoznacna. 42 tedy Grunt.

A jak uz vime ze stoparova pruvodce galaxii, podstatna neni az tak odpoved, nybrz nejdulezitejsi je polozit hlavne spravnou otazku…

Ale nejprve par cisel

Soucasny pocet balicku v repozitarich jednotlivych nastroju

Composer 40.045
Bower 18.578
Grunt 3.638
Yeoman 1.112

k tomu asi neni potreba nic dodavat …

Co to je Grunt?

Grunt sam sebe definuje jako javascript task runner. Je to npm balicek, tj javascriptova knihovna pro server side node js.

(Neni potreba se bat, ze o node.js nic nevim. Node.js a npm staci nainstalovat globalne a to bud s root pravy a nebo lepe do cesty kde mam prava na zapis pod uzivatelem, pod kterym pracuji. A nic vic o node.js nemusim vedet.)

Proc javascript? Kdyz delam v php?

Protoze je to siroce pouzivany standard, je pro nej jiz vice nez 3000 pluginu.

Proc by me mohl byt uzitecny task runner? Co vlastne muze byt grunt task?

Kratka, nic nerikajici odpoved: cokoli

Delsi odpoved: prakticky cokoli (krome samotneho programovani), co jsem kdy na projektu potreboval udelat pomoci jakehokoli nastroje si muzu nadefinovat jako grunt task, napr.:

  • bower install
  • prekopirovani nejakych souboru, z originalni adresarove struktury bower balicku do nejake me struktury adresaru, at se mi s nim lip pracuje
  • kontroly javascriptu
  • kompilace less/sass atp.
  • optimalizace obrazku
  • komprimace js/cs atp.
  • vygenerovani dokumentace
  • spusteni testu php/js/selenium
  • vytvoreni vagrant instance
  • automaticky deployment
  • vytvoreni databaze
  • migrations
  • vymazani obsahu cache
  • automaticky release process
  • update informaci o mem rozsireni na mych strankach pri vydani nove verze
  • odeslani mailu sefovi, ze hotovo a padla

Hmm, zajimave a to je vse? Jako dobry, ale to ze misto bin/tester tests/ budu psat grunt tests mi az jako tak velky prinos neprijde …

To zajimave teprve prichazi…

Grunt pro pokrocile v kostce

(aneb k cemu vsemu to trapeni s miliony konfiguracnich souboru v projektu navic je)

Grunt sam o sobe nedela nic jineho nez spousteni tasku, pro kazdy grunt-plugin se do nabidky gruntu prida jeden, nekdy vice tasku, kazdy task si mohu/nekdy ani nemusim nakonfigurovat. V cem spociva opravdova sila gruntu je, jak jednoduse a elegantne mohu jednotlive tasky sdruzovat do sekvenci a vytvaret si tak nove tasky.

Priklady:

Build aplikace

	grunt.registerTask('default', [
		'bower',
		'wiredep',
		'replace:server',
		'useminPrepare',
		'netteBasePath',
		'concat:generated',
		'uglify:generated',
		'cssmin:generated',
		'copy:server',
		'notify:default'
	]);
  • default: ke spusteni staci napsat „grunt“ a pripravi se vse potrebne od stahnuti js balicku pres pridani do @layout.latte po vygenerovani minifikovanych js a css souboru, tak aby mi bezela development i production verze

Release nove verze aplikace nebo knihovny

	grunt.registerTask('release', [
		'default',
		'nette-tester',
		'bump-only',
		'changelog',
		'bump-commit'
	]);
  • release: Jsem pripraveny na vydani nove verze? Co potrebuji udelat? Pustit testy, navysit cislo verze, mozna i na vice mistech, vygenerovat changelog, commitnout to a pridat tag. A pro jistotu pred tim jeste pustim i task „default“, (tj uvnitr sekvence tasku mohu volat jiny slozeny task), abych mel jistotu ze mam vsechny zavislosti a vygenerovane soubory aktualni.

(priklady jsou z pracovni verze konfigurace, ve finale se tasky rozdelim i pojmenuju lepe)

V cem spociva kouzlo promyslene konfigurace tasku? (treba v pripade tasku pro release nove verze)

  • automatizace – misto hromady ukonu, ktere bych musel udelat napisu „grunt release“
  • autodokumentace – novemu kolegovovi nebudu psat desetistrankovy manual a delat dvou hodinove skoleni, co vsechno musi udelat, aby mu projekt bezel na jeho stroji a mohl se zapojit do prace na projektu a jaky pouzivam na projektu workflow pro build, testovani, release nebo deployment, jen mu reknu: „Mrkni na grunt.js“
  • efektivita – nebudu premyslet co jeste musim udelat kdyz chci uvolnit novou verzi, hledat kde to mam udelat a jak to mam udelat
  • prevence chyb – pokud jakykoli task selze provadeni scriptu se prerusi a release (nefukcni verze) se neprovede
  • snizeni vlivu lidskeho faktoru – nestane se mi ze zapomenu jeste prekopirovat ten jeden soubor nebo se prekliknu a prekopiruju ho o adresar vedle, nebo udelam preklep v nazvu nejakeho souboru a pak budu pul dne hledat, proc najednou neco nefunguje, i kdyz jsem vlastne nic zasadniho nemenil

Co je Yeoman?

Doladim na jednom projektu dokonalou konfiguraci a rad bych ji pouzival v novych projektech. Co udelam? Prekopiruju si konfiguraky a projdu je vsechny abych tu a tam neco zmenil? Ne, od toho je preci sandbox, abych nemusel zakladni strukturu pro nove projekty vyzobavat z projektu existujicich… Jenze na jednom projektu budu chtit mit twitter bootstrap, na druhem neco jineho, atd. To budu mit pro kazdy typ webu jeden sandbox a budu si udrzovat treba 5 sandboxu?

Taky ne, od toho je Yeoman. Oficialne definovan jako „THE WEB'S SCAFFOLDING TOOL FOR MODERN WEBAPPS“, po lopate „generator sandboxu“.

Ale k tomu snad nekdy priste, nejdriv si musim pohrat s konfiguraci a tasky pro grunt a to nejlepe na vice ruznorodych projektech a pak teprve mohu vubec uvazovat nad tim jak celou tu armadu uzitecnych nastroju posunout jeste o uroven vys.

Jak tedy zni ta „spravna“ otazka?

Kdyz jsem se o kombinaci Yeoman/Grunt/Bower asi pred dvema roky dozvedel, na prvni pohled mi to prislo zajimave a perspektivni reseni. Na druhy pohled jsem netusil, ktera bije, nechapal jsem proc 3 nastroje, jak maji rozdelene sve ulohy a nejak mne presla chut na blizsi seznameni. Ted, kdyz jsem si to trochu osahal, zacal jsem premyslet – maji jeste vubec smysl reseni typu Webloader? Jenze, mohu zodpovedne rici, ze stoji kazdemu za to, venovat x hodin nastudovani neceho noveho a pak x hodin refaktorovani existujicich projektu?

Prestal jsem resit jestli je lepsi to nebo to. A zacal se ptat sam sebe – co je pro mne dulezite? Jake jsou me dlouhodobe cile? Co vlastne chci?

Najit tu spravnou otazku, na kterou si clovek odpovi: „Ano ma smysl zacit pouzivat Bower/Grunt“, si musi kazdy sam.

Ja za sebe jsem nasel ctyri:

  • Chci mit vyresene frontend (js/css/apod) zavislosti?
  • Chci co nejvice zautomatizovat praci na projektech?
  • Chci se udrzovat v obraze a byt schopen se obcas aspon v rychlosti seznamit (i prakticky) s nejakou novou technologii?
  • Chci mit dalsi male bezvyznamne plus v seznamu zakladnich znalosti v ramci vyvoje webovych technologii?

Editoval LeonardoCA (14. 10. 2014 13:25)

LeonardoCA
Člen | 296
+
+4
-

(pro nedockave)

Sandbox s podporou composer + bower + grunt + par vychytavek

Kdo by chtel vyzkouset jak se da pohrat s build konfiguraci v praxi, se muze mrknout a nebo rovnout zkusit si pohrat s cvicnym sandboxem https://github.com/…/nplayground, ve kterem si hraju s formulari, atp.

// -1. mit nainstalovat podporu npm a node.js na ubuntu napr
$ sudo apt-get install npm

// 0. jednou globalne nainstalovat bower a grunt
$ npm install -g bower
$ npm install -g grunt-cli

// 1. pokud jiz mate nainstalovane vsechny nastroje, staci jen
$ composer create-project leonardoca/nplayground my-app
$ cd my-app
$ npm install
$ grunt

jiz je vyreseno:

  • instalace bower komponent
  • autowiring (ne uplne univerzalne), tj automaticke vlozeni pridanych js/css zavislosti primo do sablon
  • dokopirovani toho co je treba kam je treba
  • jak „hacknout“ kdyz nejaky balicek nema bower.json kompletni (a nebo ho nema vubec)
  • snadny, temer automaticky release verzi
  • automaticka tvorba changelogu na zaklade commitu (filtrovanych)

nedoslo jeste na:

  • kompilaci less
  • automaticke pridani verze souboru na urovni gruntu (obdoba main.js?v0.0.3)
  • clean (obcas to chce zamest)
  • lepsi struktura spousteni tasku
  • testovani php i js
  • watch
chemix
Nette Core | 1296
+
+2
-

@LeonardoCA diky za share, inspirativni balicky a konfigurace. Mrkni sem : https://github.com/…owledge-base @medhi tam pridaval podporu pro less a pridavani verze souboru app.min.js?v=wasabi tam je take vyreseno

LeonardoCA
Člen | 296
+
+1
-

diky za link

Pokud jde o less, chci si pridat do sandboxu reseni, abych si mohl editovat vlastni bootstrap template, pridavat vlastni mixiny, ja se designu moc nevenuju, a zatim jsem si css vzdycky nejak dobastlil, chci to uz zacit delat spravne, ale to se musim nejdrive doucit less a nadefinovat si jaka struktura mi bude vyhovovat.

Pokud jde o verze souboru, tak to uz trochu podobne resim, pro production verzi. Ale uvazuju jestli nebude zajimavejsi to nechat na starosti nejakemu grunt pluginu, ktery dokaze pridavat verze souboru do nazvu souboru, pri kazde uprave a to nejen u js, css, ale treba i obrazku …, pak o tom v kodu template nemusi byt ani zminka … a bude to fungovat automaticky (akorat s tim bude trosku vic prace to nakonfigurovat)

LeonardoCA
Člen | 296
+
+1
-

Do prvniho prispevku jsem pridal zakladni seznameni s tim co je Grunt a Yeoman.

Do druheho prispevku budu postupne pridavat (podle casu) nejake info k vlastni konfigraci, jak vznikala, jake a proc jsem si vybral pluginy, co me potrapilo nez jsem vyresil tak jak jsem chtel

A uvitam jakekoli dotazy, pripominky nebo napady.

chemix
Nette Core | 1296
+
+1
-

drzim palce s tim Yomanem, chystam se k tomu uz dlouho, ale skoncil jsem s tim ze jsem si stahnul angular generator a symfony generator a dal nebyl cas … nebo spise bylo vzdy neco dulezitejsiho nez toto …

co se tyce struktury css tak jelikoz chces pouzivat bower tak on ti ji nadefinuje a nema cenu to nikterak resit …

LeonardoCA
Člen | 296
+
+1
-

co se tyce struktury css tak jelikoz chces pouzivat bower tak on ti ji nadefinuje a nema cenu to nikterak resit …

k reseni struktury css jsem se zatim jeste nedostal, ale z toho co jsem nastudoval, tak je mozne cokoli ohnout tak jak chci, tak uvidime


Grunt nebo Gulp?

pred chvili jsem se koukl na prednasku o Gulpu, s obavou, ze jsem se tady rozepsal o necem co uz je zastarale :)

neni to tak uplne pravda, pokud chcete vedet, v cem je rozdil mezi Grunt a Gulp pekne to vysvetluje slideshow http://markdalgleish.github.io/…lp-vs-grunt/
<spoilerAlert>jediny podstatny rozdil je na predposlednim slidu</spoilerAlert>

Je Gulp lepsi nez Grunt? Nevim. Ma smysl abych pokracoval s tim co jsem zacal a nebo bych mel radeji zacit pouzivat Gulp? Nejsem si jisty.

Jak jste si mozna vsimli, snazim se klast vetsi duraz na otazky Proc? Proc se mam neco noveho ucit? Proc to funguje? A proc zrovna takhle? nez na otazky Jak neco udelat? Jak dosahnout toho a toho? To uz popisuje dokumentace kazdeho projektu, tak proc to psat znovu …

A protoze, proc, je z meho pohledu dulezitejsi nez jak, budu pomalu pokracovat v tom com jsem zacal a jak se to vyvine, uvidime …

Editoval LeonardoCA (16. 10. 2014 14:33)

jiri.pudil
Nette Blogger | 1028
+
+3
-

Vzhledem k tomu, že ekosystém okolo obou projektů pokrývá 99 % potřeb webového vývoje, je to imo opravdu jen volba podle toho, co ti připadá přehlednější a příjemnější na používání. Hlavní rozdíly vidím dva:

  • Gulp používá streamy, takže nemusíš řešit nějaké přechodné soubory, když provádíš řetězy akcí jako např. coffee -> concat -> uglify -> sourcemaps. Prostě všechno zřetězíš za sebe a občas nějaké streamy pospojuješ. Gulp si pak všechno udělá v paměti a zapíše až úplný výsledek.
  • Code vs configuration. Právě tady se láme chleba. Mi se třeba lépe čte i píše Gulpfile než Gruntfile (a to i tehdy, když mě coffeescript ušetří psaní závorek a dalších blbostí). Ale to je dost subjektivní, takže alespoň jedno objektivní měřítko: Gulpfile se stejnou funkcionalitou je obvykle i výrazně kratší.
LeonardoCA
Člen | 296
+
+1
-

Dik za nazor a doplneni, presne takhle jsem to pochopil.

Ja s minimalni zkusenosti radeji moc nehodnotim, asi testnu postupne oba na necem trosku slozitejsim nez typicke priklady a pak pridam dojmy.

Tomáš Votruba
Moderator | 1114
+
0
-

Diky za tema kluci. Meli byste ke gruntu nejake uzitecne zdoje (2–3) pro zacatek?
Už spravuju závislosti pomocí boweru, grunt čerstvě nainstalován.

Editoval Tomáš Votruba (21. 1. 2015 13:51)

chemix
Nette Core | 1296
+
+2
-

@TomášVotruba napsal jsem pred casem takovej rychly uvod, jak to pozuivam na nette projektech osobne https://pla.nette.org/…unt-a-usemin

LeonardoCA
Člen | 296
+
+1
-

Mi se mezitim podarilo rozchodit konfiguraci vcetne podpory pro grunt/bower/redis/mysql, takze mi cely build aplikace probehne i na Travis CI a snazim se o kompletni CI, vcetne deploymentu, to se mi podarilo rozbehnout pro novy Pagoda box, ale tam build bezi zase pres Boxfile

Jeste to neni uplne komplet podle mych predstav, takze az doladim napisu trochu vic.

Editoval LeonardoCA (21. 1. 2015 18:56)

David Ďurika
Člen | 328
+
+4
-

@TomášVotruba ak grunt nepoznas / nepouzivas tak sa na to vykasli, a pouzi Gulp http://www.zdrojak.cz/…-porazeneho/

Tomáš Votruba
Moderator | 1114
+
0
-

@chemix Díky. Zmíněné odkazy už jsem proklikal.

@DavidĎurika Díky. Zkusím.

@LeonardoCA Díky za konkrétní kód!

Upřesním: lépe zdroje zahraniční a za poslední půlrok.

Editoval Tomáš Votruba (22. 1. 2015 14:05)

Tomáš Votruba
Moderator | 1114
+
0
-

Pěkný zdroj: Gulp na Laracasts

Editoval Tomáš Votruba (25. 1. 2015 19:59)

o5
Člen | 416
+
0
-

Rozdělujete assets per modul?

├── app
│   └── modules
│       ├── admin
│       └── front
└── www
    └── assets
        ├── admin
        └── front
iguana007
Člen | 970
+
0
-

@o5 já ano

o5
Člen | 416
+
0
-

@iguana007 a nechtěl by ses podělit o svůj gulpfile.js? :)

Editoval o5 (20. 2. 2015 11:49)

iguana007
Člen | 970
+
0
-

@o5 zatím to řeším bez Gulpu, ale chtěl bych se na něj v nejbližší době podívat, zakopávám o něj v rss čím dál častěji, ale pořád na to nějak nebyl čas :)

Kcko
Člen | 465
+
0
-

@LeonardoCA Díky za pěkné shrnutí, dneska jsem byl na školení u Rikiho Fridricha a konečně jsem pořádně pochopil k čemu to celé je (Grunt/Bower/Yeoman), Gulp se mi nelíbí.

Těším se na víkend a na sandbox až se v něm trošku pohrabu a přiučím se.

o5
Člen | 416
+
+1
-

@Kcko nasazuju teďka na jeden starší projekt Gulp + Bower + Compass/Sass + gulp-concat pro JS a po předchozích zkušenostech (loni jsem stavil svůj projekt na Grunt/Bower/LESS + Browserify pro JS) musím říci, že Gulp mi příjde více přehlednější, flexibilnější a řekl bych, že je i nyní více používaný.

Níže uvedené bylo pro mě největším přínosem:

Editoval o5 (25. 2. 2015 17:13)

Kcko
Člen | 465
+
0
-

@o5 Ahoj, díky za tipy. Já nemůžu po tak krátké době soudit, ale zatím se mi líbí víc líbí GRUNT, ze začátku jsem to vůbec nechápal, pak jsem si zkusil pár tasků a ta syntaxe a celkově mi přijde logičtější a přehlednější. Je možné, že po čase změním názor. Linky si uložím a projdu v dohledné době (kromě Sass Way ;-), tam jsem jak doma krom dokumentace k SASSu a Compassu).

Jsem, ale trošku divný, vybírám si pro někoho naoko složitější a robustnější řešení – např. všichni kolem mě používají LESS a o ten bych si neopřel ani kolo (taktéž kombinaci jako ty Sass/Compass, akorát mi začíná vadit dlouhé generování … středně velký projekt, přegenerování souborů ~ 4–8s, ještě mám v plánu mrknout na LibSass, kolega to začal používat a libuje si jak je to rychlé, bohužel v Compassu jsou jisté věci kterých se zbavit nechci.

Musím pomalu, s Gruntem jsem začal před 2 dny ;) a je fakt, že během školení kdy lektor povídal o Gulpu jsem si psal tasky v Gruntu a zkoušel co to umí a co ne, a když začal povídat o "pipes, streamech atd… tak jsem si řekl, co je to za sra*cku a už tomu moc pozornost nevěnoval, ale časem se k tomu vrátím).

o5
Člen | 416
+
0
-

@Kcko ~4–8s je fakt moc. Nevim jak pro Grunt, ale pro Gulp jsou dva pluginy gulp-ruby-sass a gulp-sass, pricemz u toho prvniho i sam autor pise This is slower than gulp-sass, but more stable and feature-rich. Ted jsem to schvalne zkousel na tom starym projektu a samotny gulp sass task ~500ms, je to ale starsi stredne velky projekt bez css frameworku, pouze reset.

Zajimavej clanek Speedtesting gulp.js and Grunt, otazka jak moc vypovidajici.

Kcko
Člen | 465
+
0
-

@o5 je to moc no, člověk si asi dokáže představit když napíše 2 řádky CSS, vybuildí (já to mam v SublimeText2 na control + save) a pak si může jít uvařit kafe, než se to přegeneruje. Může za to můj starší PC a COMPASS (pěkný článek o tom napsal Hugo G.

Donedávna jsem generoval pomocí cmd a pušteného watch compassu, pak jsem objevil build do sublime a ted si to chci vyzkoušet přes GRUNT (a zkusit vyhodit compass a narvat tam LibSass).

Jsem na to zvědavej.

// PS kdybych ti poslal svůj SCSS, zkusil bys to vygenerovat? Docela by mě zajímal čas …

Editoval Kcko (26. 2. 2015 21:21)

o5
Člen | 416
+
0
-

PS kdybych ti poslal svůj SCSS, zkusil bys to vygenerovat? Docela by mě zajímal čas

však si vyklonuj ten gulp-starter a nahazej si to do src/sass

Editoval o5 (27. 2. 2015 9:36)

Kcko
Člen | 465
+
0
-

@o5

no mám v plánu udělat test přes víkend (středně složitý projekt s compassem)

  1. Pustit ho klasicky přes compass watch nebo build jak dělám nyní
  2. Pustit ho přes Grunt
  3. Pustit ho přes Gulp

ale zajímalo by mě srovnání z rychlejšího PC (jak jsem psal můj komp je už nic moc, a pořád hledám řešení rychlosti a možná bych to vyřešil silnějším NTB a pak bych třeba mohl zůstat u 1 nebo 2 …)

Proto jsem se ptal jestli bys to nezkusil ty pokud máš silnější PC než já (CoreDuo2, 4GB Ram, 320 GB – ne SSD)

o5
Člen | 416
+
0
-

Pokud dneska někdo řešíte co z výše uvedeného použít, koukněte na Laravel Elixir. Je to sice trochu magie, ale používame to nyní na projektu a funguje to + ušetří to celkem dost času.

snizemic
Člen | 28
+
0
-

Ahoj všem, nechtěl jsem zakládat novou diskusi a s výše uvedeným to vlastně souvisí.
Jsem v Nette začátečník a nevím, jestli dělám něco špatně. Používám Gulp + Browsersync s proxy (v gulpfile.js). Všechno funguje bez problémů, problém je jen ten, že když odešlu Nette formulář, tak sice všechno proběhne v pořádku, ale při redirectu mi z URL zmizí číslo portu. Zkoušel jsem si udělat klasický HTML formulář a ten je v pohodě. Nevíte, co s tím?

iguana007
Člen | 970
+
0
-

snizemic napsal(a):

Nevíte, co s tím?

Zkus si změnit action u toho formu na absolutní URL:

$form->setAction($this->link('//this'));
snizemic
Člen | 28
+
0
-

Díky moc za odpověď! Nicméně to asi není to pravé. Je pravda, že to vyřeší, že nezmizí z URL číslo portu, ale nedojde k redirectu. Mám ten formulář jako samostatnou komponentu a v ní i callback onSuccess[] (viz nasledující).

protected function createComponentRegistrationForm() {
        $form = new Form;
		/* jednotliva formularova pole */
		$form->addSubmit('send', 'Registrovat')
		$form->onSuccess[] = [$this, 'formSucceeded'];
        return $form;
    }

public function formSucceeded($form, $values) {
		/* zpracovani dat */
        $this->presenter->redirect('Registration:success');
    }

Takže pořád nevím :-(

Editoval snizemic (16. 2. 2016 17:09)

iguana007
Člen | 970
+
0
-

Nevím, kde máš tento kód, ale nemůže být problém v té metodě formSucceeded? Konkrétně ve volání $this->presenter..... ? když si dumpneš $this->presenter v té metodě, co to vypíše?

snizemic
Člen | 28
+
0
-

Aha, pardon za neúplnou informaci. Mám to normálně jako samostatnou komponentu:

class RegistrationForm extends Control {

protected function createComponentRegistrationForm() {
        $form = new Form;
        /* jednotliva formularova pole */
        $form->addSubmit('send', 'Registrovat')
        $form->onSuccess[] = [$this, 'formSucceeded'];
        return $form;
    }

public function formSucceeded($form, $values) {
        /* zpracovani dat */
        $this->presenter->redirect('Registration:success');
    }

}

V presenteru pak formulář vytvářím pomocí vygenerované továrny a předávám ho klasicky do šablony.

iguana007
Člen | 970
+
0
-

Ok a ten dump (viz. můj předchozí post) vrátí teda co? :)

snizemic
Člen | 28
+
0
-

:) Nevím, jestli ti jde o něco konkrétního, ale dump vrátí RegistrationPresenter, tj. presenter, ve kterém tu komponentu vytvářím.

iguana007
Člen | 970
+
0
-

Ok, tak poslední věc co mě napadá: třída Form … měl by si používat Nette\Application\UI\Form a já si tipuji, že používáš: Nette\Forms\Form … je to tak? Pokud ne, tak přenechám slovo dalším, ja už nevím, co jiného by to mohlo být :)

snizemic
Člen | 28
+
0
-

Používám Nette\Application\UI\Form, jak píšeš :) Zkoušel jsem to zpracování formuláře udělat až v presenteru, ale je to to stejné. Zajímavé…
Každopádně moc díky za snahu!

mike227
Člen | 5
+
0
-

snizemic napsal(a):

Ahoj všem, nechtěl jsem zakládat novou diskusi a s výše uvedeným to vlastně souvisí.
Jsem v Nette začátečník a nevím, jestli dělám něco špatně. Používám Gulp + Browsersync s proxy (v gulpfile.js). Všechno funguje bez problémů, problém je jen ten, že když odešlu Nette formulář, tak sice všechno proběhne v pořádku, ale při redirectu mi z URL zmizí číslo portu. Zkoušel jsem si udělat klasický HTML formulář a ten je v pohodě. Nevíte, co s tím?

Ak by ešte niekto hľadal riešenie:

browser-sync: 2.18.13+

https://github.com/…c/issues/430

browserSync({
      proxy: {
        target: '127.0.0.1:8000',
        ws: true,
        proxyOptions: { changeOrigin: false },
      },
      ...
});