27. května bude sraz!
Autor Zpráva
crash01
Profil
Dobrý den,
vím, že se tu podobné téma řešilo už mnohokrát, ale přesto se musím zeptat ještě jednou.
V poslední době je na programátory i "programátory", kteří programují v čistém PHP, pohlíženo jako na "znovuvynálezce kola", ale vyplatí se mi opravdu používat nějaký framework? Od každého příznivce toho svého frameworku slyším, jak jim neuvěřitelně usnadnil práci.

Jediné. co bych prozatím u frameworku využil, je šablonování (nenapadá mě jak jinak to nazvat). Vyplatí se tedy kvůli něčemu takovému po frameworku sáhnout, když je možné použít např. Smarty, či jiný šabl. systém?

Zatím jsem pomrkával po Zendu (strašně těžkopádný), Nette (mizerná dokumentace do začátku) a CakePHP (pěkná dokumentace, základní syntaxe nevypadá zas tak složitě).

Prozatím jsem zastával názor, že pokud člověk v PHP píše "slušně" a dodržuje určitou strukturu (jak v kódu, tak i v adresářích a souborech), je pro něj nějaký framework jen přítěží.

Doufám, že se mi to podařilo nějak tak popsat. :)
Enyeus
Profil
Framework ti o hodně urychlí práci a zkrátí kód, který je navíc bezpečnější. Nette rozhodně nemá špatnou dokumentaci, je, myslím si na velmi dobré úrovni, ze které se naučíš všechno důležité pro práci s ním.
crash01
Profil
Enyeus:
Spíš jsem měl říct neaktuální.
Joker
Profil
crash01:
Jiný pohled: Programátoři programující objektově si jistý svým způsobem „framework“ vytvářejí sami, budují si knihovny tříd.

Například šablonovací systém buď naprogramuju svůj, nebo použiju cizí, ale obvykle jen jednou. Pak už používám ten co prvně (nebo nějaké jeho vylepšené verze).

Takže pak se problém mění na to, jestli si „framework“ budovat sám, nebo se spolehnout na nějaký už hotový :-)
Medvídek
Profil
crash01:
Já se naopak v PHP vyhýbám všemu objektovému, můj názor je, že se do php moc nehodí. Chápu ho třeba u Cčka :)
Bertram
Profil
Medvídek:
můj názor je, že se do php moc nehodí

Ahoj, jak to myslíš? Já jsem přesvědčen, že jde spíš o to, je-li objektový přístup v daném jazyku podporován a ne o to jestli se na to hodí nebo ne.
Pak je na každém co mu vyhovuje a né co je pro daný jazyk lepší. Já ale „umím“ pouze PHP, jako samouk bez IT vzdělání, takže se možná pletu.

crash01:
Framework dle mého ano, ale potom se může stát, že občas dohledávám, co je pro ostatní triviální, protože to framework řeší sám a tak nějak na pozadí :)
crash01
Profil
Joker:
Tak nějak to taky vidím, ale když pak někomu, kdo s frameworky pracuje, řeknu, že používám svůj systém atd., koulí očima s tím že "vynalézám kolo".

Proto by mě zajímalo, jestli existuje opravdu nějaký velký důvod pro učení nového frameworku, nebo dokonce přepis projektu na nový framework.

Co myslíte? :)
Tori
Profil
crash01:
když pak někomu, kdo s frameworky pracuje, řeknu, že používám svůj systém atd., koulí očima s tím že "vynalézám kolo".
No myslím, že neni špatný si to sám vyzkoušet, zkusit vyřešit nějaké konfliktní požadavky co by měla konkrétní část FW umět a přitom zachovat její nezávislost... a pak se podívat na hotový framework, jak to zkušenější programátoři vyřešili tam.

, jestli existuje opravdu nějaký velký důvod pro učení nového frameworku, nebo dokonce přepis projektu na nový framework.
Ale podle [#1] mluvíte o projektu, který teď žádný framework nepoužívá. Důvodů k použití FW bude určitě víc, než důvodů ke změně FW.
Majkl578
Profil
Podobných témat o frameworcích tu už pár bylo, některé i s poměrně zajímavou diskuzí. Zkus hledat.

Obecně framework vede programátora k čistší cestě programování a zároveň usnadňuje každodenní úlohy (tvorba šablon, formulářů atd.).
Já, jakožto příznivec Nette, ho mohu doporučit, výhodou je určitě i česká komunita a aktivní fórum / Jabber chat.

crash01:
Spíš jsem měl říct neaktuální.
Můžeš to podložit fakty? Nette má už nějakou dobu novou a relativně aktuální dokumentaci (paradoxně na pár místech zmiňuje věci, které jsou teprve v plánu v blízké době).

jen přítěží
To se jeví jako subjektivní nesmysl.

jestli existuje opravdu nějaký velký důvod pro učení nového frameworku
To se lidem, kteří framework nepoužívají, těžko vysvětluje. Většinou to pochopí až ve chvíli, kdy jej umí používat.
__construct
Profil
crash01:
Dôvodov prečo používať nejaký hotový framework je viac – mnohé tu boli spomenuté. Ja by som doplnil niečo z hľadisk vývoja napríklad bezpečnosť – musel by si stráviť veľa času aby si naštudoval možné formy ochrany proti rôznym typom útokov – od Cross-site Scripting-u, cez SQL Injection až po Cross-site Request Forgery — frameworky to majú všetko ošetrené.
Ďalšou výhodou je používania frameworku je to, že každý framework má nejaký coding standard, ktorého dodržiavaním sa môžeš naučiť pracovať v týme.
V neposlednom rade je to lepšie využitie na trhu práce – pozri si pracovné ponuky na programovanie. Väčšina z nim požaduje znalosť nejakého frameworku.
Framework rozhodne stojí za to používať

Medvídek:
Já se naopak v PHP vyhýbám všemu objektovému, můj názor je, že se do php moc nehodí.
Je pravda, že podpora objektového programovania v PHP nebola od začiatku a tým pádom nemá dobré základy, ale objektové programovanie je paradigma, spôsob uvažovania, teda nie je závislé na kontrétom jazyku.
Chápu ho třeba u Cčka :)
Ja nie – v Cčku nie je žiadna podpora objektov :-)

Majkl578:
Názor že Nette nemá dobrú dokumentáciu je zapríčinený tým, že dokumentácia obsahovala niekoľko týždňov v základných kapitolách vetu „Omlouváme se, tato stránka je ještě v přípravě a bude hotová dnes večer.“ Odradilo to mnohých čakať až bude doplnená. Taktiež sa neustále odďaluje vydanie verzie 2, neustále sa niečo mení (alebo sa aspoň navrhuje zmena) – DI, autorizácia/autentifikácia… Mňa to tiež prestalo baviť a na novšie projekty používam radšej Symfony2.
crash01
Profil
Nakonec jsem se vrhl na to CakePHP. Dokumentace mi příjde docela fajn. Najdou se i nějaké ty tutoriály. Nette se mi líbí, ale věci, které jsem zkoušel v tutoriálech, jsou ve 2. verzi třeba úplně jinak. Opravte mě. Této zpětné nekompatibility se proto trochu děsím. Každopádně nad Nette taky přemýšlím, ale až od druhé stable verze. :)
Nox
Profil
crash01:
Proto je to verze 1 a verze 2. Silně pochybuji, že třeba Zend a Zend2 nebo Symfony a Symfony2, mají identickou API, spíš to bude asi ještě rozdílnější.

Osobně (ale asi nejsem výjimka) jsem skončil o frameworku protože - stejně jsem vždycky vyráběl takovou část aplikace, kde byly takový ty obecný věci, takže v podstatě framework. Není od věci si to zkusil, ale na vážno už bych fakt radši použil něco cizího.
Zkoušel jsem Kohanu3, momentálně jsem zakotvil u Nette2, to se mi líbí nesrovnatelně víc a je tam spousta věcí kvůli kterým se mi nechce ani na jiný framework, ani na jiný jazyk.

Navíc - člověk se využíváním cizího kódu učí, jak psát svůj tak, aby se taky dobře používal. Plus se můžeš kouknout dovnitř a taky se něco přiučit.

Ono programování samotný je taky super, ale finální produkt je většinou to podstatné - proto je dobré zauvažovat o využití už hotových věcí nebo nástrojů (framework, ORM, JS knihovny, CSS preprocesory atd.)

__construct:
Zase ale aby nebyl dojem že použití frameworku = není žádná bezpečnostní díra v aplikaci. Fw hodně pomůže, ale 1) nic není dokonalé 2) v kódu co napíšeme sami může být díra atp.

No GTK se ty objekty v C nějak snaží emulovat, ale ... je to nářez, takový PHP je oproti tomu elegance sama :) (nebo mi to tak aspoň přijde)
Ugo
Profil
Velké frameworky jsou špatné, áno? Snaží se ti totiž namluvit že podporují věci které ani podporovat nemohou především u té bezpečnosti (nebo třeba AJAX...). Pokud jde o šablony tak jediné co má alespoň náznak použitelnosti je Latte v nette (nikoli originální latte, to je děsné), u smarty budeš tlouct hlavou o stůl. Ale nic se nevyrovná originálnímu šabl. systému, čili PHP samotnému. Některé FW se ti snaží vnutit jejich syntaxi která není ani logická ani úsporná, specialista na toto je Zend, mimo jiné ti samotné jeho puštění zabere solidní dávku času. U FW s automatickou cache se navíc setkáš i s problémy s ní, až budeš zkoumat proč ti něco nejde a ono to bude jen kvůli cache, s tím jsem měl zelenání hlavně v Nette. Z hotových FW které znám je dobrý jen Code Igniter a věřím že bude slušná i jeho odvozenina - Kohana a věřím i v Yii které vypadá zajímavě. Co jde o pracovní trh, nejlépe je na tom Nette, tam musím smekat před Davidem jak ho rozšířil.. a přitom taková hrůza :) - horší už je snad jenom zend (a neznám symphony). Obecně taky platí, že co ve většině FW uděláš na 50 řádků ve 3 souborech, uděláš bez nich na 10 řádcích v jednom.

Shrnul bych to tak, pokud chceš pracovat jako vývojář, nauč se Nette. Jestli programuješ pro zábavu a chceš FW, stáhni si CI nebo Yii. V každym případě se vyhni smarty :-D. Jestli máš nějaký projekt který už jen upravuješ, moc bych o převodu do FW neuvažoval - zbytečná práce.
Jan Tvrdík
Profil
Znám do hloubky jenom Nette, takže se budu vyjadřovat primárně k němu.

crash01:
Pokud nechceš psát pořád dokola to samé, tak nějaký framework používáš musíš. To čemu ty říkáš vlastní struktura & vlastní knihovny je vlastně tvůj vlastní framework.

Důvody, proč použít nějaký hotový framework třetí strany jsou např. tyto:
1) Framework používá velké množství lidí, takže je mnohem lépe otestovaný, než tvůj vlastní framework.
2) Řešení a postupy ve frameworku jsou otestované na stovkách / tisících webů.
3) Velmi dobře vyřešená architektura celé aplikace (typicky MVC).
4) Mnohem lepší uplatnění na trhu práce.

Pokud nechceš hned přejít na celý framework, tak zkus použít třeba jenom laděnku a Latte.

Ugo:
Snaží se ti totiž namluvit že podporují věci které ani podporovat nemohou především u té bezpečnosti
Mohl bys to nějak rozepsat? Nějaké konkrétní věci, kde frameworky selhávají? Pokud uživatel není blbec, co ignoruje bezpečností doporučení, tak by neměl narazit na problém.

nic se nevyrovná originálnímu šabl. systému, čili PHP samotnému
Čisté PHP je třeba oproti Latte strašně ukecené a spousty věcí se v něm realizují velmi obtížně (např. bloky / dědičnost šablon).

Obecně taky platí, že co ve většině FW uděláš na 50 řádků ve 3 souborech, uděláš bez nich na 10 řádcích v jednom.
V dobrých frameworcích platí ta úměra trochu jinak – to co uděláš bez frameworku na 50 řádků v jednom souboru, uděláš s framworkem na 10 řádcích ve třech souborech.
Ugo
Profil
Jan Tvrdík:
Například nemůže FW řešit XSS (neměl by), neměl by bránit posílání požadavků z jiných stránek a obecně vše kromě SQL injection by asi měl nechat na programátorovi. Vytáhnuto z Nette doc. "Velmi důležité je, že Latte vypisované proměnné automaticky escapuje." Toto není řešení, ale pseudořešení které naopak otravuje, častější je vypisování bez ošetření než naopak, spíš se ošetřují jen některé důležité věci. Tyto hrátky s javascriptem by prostě PHP framework řešit neměl právě proto, že nemůže. Múže se tak tvářit, ale stejně to nechá na uživateli a nebo naopak místo ošetřování je třeba ošetřování vypínat, takže stejné množství práce na více místech.

K Latte které zatím moc neznám chovám jako k jedinýmu šabl. systému úctu, co se mi líbí je, že mohu napsat javascript a php kód, takže s ním nemám problém - naopak. Ve smarty nejde psát ani PHP bez speciálních tagů, ani javascript (jquery) bez literalu, takže to je na palici. Nesnášim když mi někdo něco nutí.

S Nette si dneska hraju téměř celý den a jako vždy když to dělám, tak mám smíšené pocity. Chybí mi nějaké geniální routování, sem rád že už není potřeba dělat vlastní model loader jelikož mi to obstará Robot - to mě neskutečně iritovalo. DB vrstva se mi nelíbí, ale nahradit jí nebude snad takový problém. Do hloubky jsem se zatim moc nedostal, nejvíc mě na Nette mrzí, že David má na to udělat mnohem lepší projekt a to, že i přes špatnou dokumentaci a né příliš velkou dokonalost se tak hrozně rozšířilo až se z něj stal fenomén.

V dobrých frameworcích platí ta úměra trochu jinak
ano v dobrých ano :) a dokonce to bude i intuitivní a bez stavů "WTF" o Zendu, Nette ani CakePHP to říct nejde (ty wtf stavy hlavně)

Ohledně bodů proč použít hotový FW souhlasím se všemi, především ten poslední bod, což je taky důvod proč se lidé učí Nette, dokonce i takovej odpůrce jako já se občas zakousnu a něco si zkusim :)

btw. routy mě u Nette neskutečne zklamaly, kdyby se na každym druhym řádku v dokumentaci nepsalo jak jsou úžasné tak neřeknu, ale toto... vyřešit aplikaci kde je modul admin a stránky bez modulu moc hezké není, problém je že narozdíl od LUCI nehledá nejlepší routu, ale první routu.. a absence jmen taky není fajn, jak pak vytvořit routu podle nějakého pravidla?
Alphard
Profil
Ugo:
Toto není řešení, ale pseudořešení které naopak otravuje, častější je vypisování bez ošetření než naopak, spíš se ošetřují jen některé důležité věci.
Tak to mám zcela opačný pocit. Vypínání escapování (což je teda stejně jednoduché) mám v minimálním počtu případů a to ještě vždy přemýšlím, jestli to fakt potřebuji a nemůže nastat situace, že by se vypsalo něco špatného.
Tori
Profil
Ugo:
narozdíl od LUCI nehledá nejlepší routu, ale první routu.
Myslíte rozdíl mezi tím, když mám např. url /clanky/123_Chumeleni-v-severnich-Cechach a takovéto 2 routy
/controller (.*) /action (.*)
/controller (clanky)/URI_clanku (\d+_[a-z_-]*)
, tak aby se neaplikovala hned ta první, ale až druhá? Nevím, jak router v Nette, ale ten co používám, zkouší jednotlivé routy v pořadí, jak byly přidané. Takže je stačí definovat od přesně definovaných k těm benevolentnějším. Anebo jsem špatně pochopila?
Ugo
Profil
Alphard:
tak to asi dělám jiné věci jelikož administraci HTML mám všude, ale aby uživatel mohl zadávat HTML tam kde to vadí s tím se tolik nesetkám a když ano tak escapuju uložení a až pak se rozhoduji jestli povolit či ne, nicméně ani escapování neřeší problém, jelikož <div> povolit mohu, ale <script> ne. Jinak jo escapování v Latte je velice jednoduché, byl trochu problém ho najít, ale pěkné. Škoda že neexistuje nette latte bez nette, to by bylo moc pěkné :) Ovšem i tak to není řešení XSS, je to jako říct že zbytečně svítím v kuchyni a tak zhasnu i nad svym stolem. Nevyčítám ovšem to že to není řešení, vadí mi že se tváří jako že je.

Tori:
jj to jsem měl na mysli, jenomže mám 3 routy které jsou stejné a liší se tím, že jednou existuje presenter, podruhé je první parametr modul atp. čili na oko sedí všechny, ale ve skutečnosti jen jedna, nette už to nezjistí a tak je dynamické routování tu tam a následuje styl pevného, že něco začíná admin/, něco error/ atd. ... velice nešikovné.
Jan Tvrdík
Profil
Ugo:
Například nemůže FW řešit XSS (neměl by)
XSS patří k nejčastějším zranitelnostem na webu a o i přesto, že ochrana proti němu je relativně snadná – stačí vše důsledně a správně escapovat. Jak je to možné? Programátoři totiž escapovat zapomínají a to i na velkých webech. Máš nějaký tip, jak to vyřešit lépe, než automatických escapováním?
(Nette vyznávající princip „less code, more security“, kdy méně psaní vede k více zabezpečenému kódu.)

neměl by bránit posílání požadavků z jiných stránek a obecně vše kromě SQL injection by asi měl nechat na programátorovi.
Nejsem si jist, co máš namysli. Pokud se jedná o ochranu před XSRF u formulářů, tak ta je defaultně vypnutá právě proto, že velké množství formulářů nedává smysl takto zabezpečovat.

častější je vypisování bez ošetření než naopak
Nikoliv. Situací, kdy potřebuješ, aby fungovaly HTML značky je velmi málo.

Chybí mi nějaké geniální routování
Routování v Nette je geniálnější, než se zdá. Umožňuje ti totiž naroutovat prakticky cokoliv.

DB vrstva se mi nelíbí
Mně taky ne, z toho si nic nedělej.

escapuju uložení
Lepší je escapovat při výpisu. Escapování při ukládání má totiž několik fatálních problémů (např. se změní délka textu, takže může přesáhnout limit pro daný sloupec v MySQL, které pokud rozřízne entitu v polovině, tak to může vést k nezobrazení celé stránky).

ani escapování neřeší problém, jelikož <div> povolit mohu, ale <script> ne
To je věc, která nemá s escapováním nic společného, proto ji (přirozeně) escapování neřeší. Používají se k tomu knihovny jako HTML Purifier nebo Texy!.

Škoda že neexistuje nette latte bez nette
Proč si to myslíš? Co třeba kapitola Samostatné použití šablon v dokumentaci?

Nevyčítám ovšem to že to není řešení, vadí mi že se tváří jako že je.
Řeší to dva největší problémy - že programátoři neumí správně escapovat a že na to pravidelně zapomínají. Jediné co chybí, je umělá inteligence, která by rozhodla, zda se daný text má escapovat nebo ne. Myslím, že za 1000 let bychom se jí mohli dočkat.
Ugo
Profil
Jan Tvrdík:
Já prostě zastávám názor, že takovéhle zabezpečení je na programátorovi a sem raději když vše dělá věci logicky i když třeba hůř a konkrétně escapování mi logické nepřipadá a opravdu jsem zatím potřeboval častěji vypsat html z adminu než html od uživatele které html být nemá. A jak se asi shodneme, řešením stejně neni escapování ale různé složitější vychytávky.

Samostatné použití šablon v dokumentaci?
Přímo podle dokumentace jsem to nezkoušel, ovšem snažil jsem se o to a narazil jsem na to že je potřeba polovina nette frameworku jelikož je to solidně provázané. A takovému použití bych neříkal samostatné - když dám příklad, tak bez Nette Strings se to neobejde co si dobře pamatuji.

Routování v Nette je geniálnější, než se zdá
To je, protože na první pohled vypadá že neumí nic :-) Ale opravdu, i zend má asi lepší routování. A přitom David by narozdíl odemě dokázal udělat i koncepci mého dokonalého routeru tak aby to bylo spolehlivé a pěkně napsané.. a pak by bylo skutečně čím se chlubit na každé 2. řádce - ale fakt je, že je možnost napsat si vlastní router, celý Nette si člověk mlže napsat vlastně sám - a občas mu nic jiného nezbývalo, viz ModelLoader a zmínka v dokumentaci, že modely nejsou nijak řešené a každý si je řeší sám.

btw. dneska si s nette opět hraju od rána a už mám opět nervy z toho, nechápu jak se to tolik lidí mohlo naučit :-) ani věci co už sem v minulosti 5x vyřešil nemůžu vyřešit znova, je to celý divná magie.

Sem zvědav jak Crash dopadne s CakePHP, dělal sem s eshopem co byl v Cake a za celou dobu sem nepřisel na to jak přidat stránku :-D Do dokumentace sem ani nenahlédl, ale nezdál se mi zrovna intuitivní a rychlostí také neoplývá. Hodně jsem zvědav na Yii, chystám se na něj až pochopim základy Nette, takže tak za 5 let bohužel :( .. to je ta strmá křivka učení, bohužel ale strmě klesá.
Jan Tvrdík
Profil
Ugo:
narazil jsem na to že je potřeba polovina nette frameworku
Třídy ve frameworku mají pochopitelně nějaké závislosti. Tobě ale stačí načíst Nette\loader.php a ten se postará o autoloading všech tříd, které šablony potřebují.
Ugo
Profil
Jan Tvrdík:
to jo, ale už je to načítání FW a ne vypreparování modulu z něj, což o to většinu jsem toho už měl nahrazeného, ale pak si člověk všimne velkýho copyrightu a raději toho nechá :-) je fakt že by to ode mě nebylo pěkné vzít si kousek a používat ho samostatně... a vlastně makra sem snad neměl vůbec a to je na tom to nejsložitější :) Radeji bych si udělal asi svůj, když nette tak komplet a to bez přepisování jakéhokoliv sys. souboru - to pak nemusím mít nette když bych si to stejně napsal sám. Jako až na to že mi leze na nervy věčně vyskočená laděnka, tak dobrý - alespon to neni nuda a má to smysl do budoucna. (pro mě jelikož se webem živím to smysl má, pro nadšence co to dělat ani nechtějí je to celkem zbytečný - to ještě k tématu)
dgx
Profil
To je dost blbý, když se webem živí někdo, kdo nerozumí escapování :-)

Ale k tématu: v otázce, zda zvolit existující framework nebo psát slušně v čistém PHP, jsem zvolil druhou možnost, protože používání frameworku se mi zdálo přítěží.
Lamicz
Profil
Ugo:
"Ve smarty nejde psát ani PHP bez speciálních tagů, ani javascript (jquery) bez literalu, takže to je na palici" - není pravda, jde to od 3.0 bez literal, stačí mezery u { a }, protože nově se bere jako Smarty proměnná pouze {$var}, ne { $var }.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: