Aš visuomet sakiau, PHP tokia lengva kalba, kad ją gali išmokti bet kas. Norint parašyti skriptą PHP kalba nereikia nei talento, nei daug žinių. Tačiau duokit talentingiems žmonės lengvą dalyką ir jie pavers sudėtingu. Apie ką aš kalbu? Apie Zend Framework.
Kiek iš jūsų yra girdėję apie Ruby on Rails? Manyčiau daugelis, apie RoR yra ne vienas straipsnis Pixel.lt. O kiek iš jūsų yra girdėję apie Zend Framework? Nedaug, ir tai nieko keisto, nes straipsnio rašymo metu oficialiai išleista tik 1.0.3 versija.
Ruby on Rails yra nuostabus, žmogus net neturėdamas programavimo žinių gali sukurti svetainę per tris naktis. Nekeista, kad atsiradus RoR susvyravo PHP pozicijos ir daugelis programuotojų susimąstė, galbūt vertėtų keisti programavimo kalbą. Kam rašyti be reikalo daug kodo, jeigu jis jau parašytas? Panašiai mąsčiau ir aš, tuomet išgirdau, kad Zend Framework bando su PHP padaryti tai, ką RoR padarė su Ruby ir pagalvojau: Valio, nebereikės rašyti daug sudėtingo kodo.
Kadangi esu parašęs Mano pirmoji Ruby on Rails programa, tai pamaniau, kad taip pat būtų šaunu parašyti Mano pirmoji Zend Framework programa. Tačiau, tik parsisiuntęs Zend Framework supratau, kad to nepadarysiu. Kodėl? Skaitykit toliau.
Norint dirbti su Zend Framework jums reikės:
- daug PHP praktinio programvimo žinių;
- praktinio supratimo kas yra OOP;
- supratimo kas yra MVC ir su kuo jis valgomas.
Paguosti galiu nebent tuo, kad apie visus šiuos dalykus Pixel.lt jau rašė.
Išgąsdinau? Vis tik pabandysim kartu sukurti ką nors panašaus į puslapį su Zend Framework, kuriant aš iškelsiu daug klausimų, tačiau greičiausiai ne į visus galėsiu atsakyti dabar, kadangi aš iš karto rašau straipsnį, programuoju pirmą programą ir skaitau dokumentaciją.
Pradėkim nuo Zend Framework parsisiuntimo (spausti čia). Sekantis žingsnis pasitikrinti ar teisingai sukonfigūruotas Apache. Kadangi Zend Framework palaiko draugiškus adresus, todėl Apache konfigūracijoje reikia pakeisti:
LoadModule rewrite_module modules/mod_rewrite.so # standartinėje konfigūracijoje šis modulis būna išjungtas. AllowOverride All # standartinėje konfigūracijoje būna None
Jeigu darysite pakeitimus Apache, nepamirškite vėliau išsaugoję konfigūracinį failą, jį perkrauti.
Kad žinotume ką norime toliau daryti, reikia susigalvoti užduotį. Aš paimsiu tą pačią užduotį kaip ir straipsnyje Mano pirmoji Ruby on Rails programa.
Užduotis. Sukurti užrašų knygutę, kurios užrašus galėtų peržiūrėti bet kas, tačiau rašyti, redaguoti tik aš.
Pirmiausiai susikuriu katalogą notebook. Į jį persikopijuoju Zend direktoriją iš archyvo (Pastaba: direktorijos demos ir tests) manęs visai nedomina.
Iš karto kylą klausimas, kokia turi būti projekto struktūra? Zend Framework priešingai nei RoR nesugeneruoja direktorijų struktūros (pataisykit, jeigu klystu). Zend dokumentacijoje radau tokią projekto struktūrą:
docroot/
index.php
application/
default/
controllers/
IndexController.php
FooController.php
models/
views/
scripts/
index/
foo/
helpers/
filters/
blog/
controllers/
IndexController.php
models/
views/
scripts/
index/
helpers/
filters/
news/
controllers/
IndexController.php
ListController.php
models/
views/
scripts/
index/
list/
helpers/
filters/
Viename projekte, kurį parsisiunčiau patyrinėjimui, radau truputėlį kitokią struktūrą:
zf-tutorial/
/application
/controllers
/models
/views
/filters
/helpers
/scripts
/library
/public
/images
/scripts
/styles
Aš nusprendžiau naudoti antrąjį variantą. Gal kas turit geresnį pasiūlymą?
Pagrindinėje direktorijoje susikuriu .htaccess failą:
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css|php)$ index.php
Šie įrašai reiškia, kad visus failus išskyrus nurodytus nukreipti į index.php.
Ką daryti toliau? Skaityti dokumentaciją.
Pasirodo, kad Zend supranta dvieju tipų konfigūracinius failus XML ir INI. Mano smegenys tokių konfigūracinių failų nepriima, formatai kurie nėra interpretuojami man atrodo nesaugūs, todėl aš pasirinkau PHP tipo konfigūracinį failą, nors jo nėra standartinėje ekipuotėje, bet pabandysiu apgauti Zend Framework.
Atsidarau application katalogą ir sukuriu config.php failą:
return array( 'webhost' => 'localhost/notebook', 'database' => array( 'adapter' => 'pdo_mysql', 'params' => array( 'host' => 'localhost', 'username' => 'vartotojas', 'password' => 'slaptazodis', 'dbname' => 'duombaze' ) ) 'prefix' => 'demo' );
Dabar grįžkime į šakinį katalogą ir susikurkime index.php failą:
error_reporting(E_ALL|E_STRICT); set_include_path('.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . './application/models/' . PATH_SEPARATOR . './application/lib/' . PATH_SEPARATOR . get_include_path());
Reikia nustatyti, kur Zend turi ieškoti failų. Jeigu nenorite nustatinėti kelių, reiktų pasidomėti standartine programos struktūra.
include "Zend/Loader.php"; Zend_Loader::loadClass('Zend_Controller_Front'); Zend_Loader::loadClass('Zend_Registry'); Zend_Loader::loadClass('Zend_View'); Zend_Loader::loadClass('Zend_Db'); Zend_Loader::loadClass('Zend_Db_Table'); Zend_Loader::loadClass('Zend_Debug'); Zend_Loader::loadClass('Zend_Auth');
Toliau įtraukiame Loader.php, kuris užkrauna reikiamas bibliotekas. Zend_Controller_Front - pagrindinis kontroleris, per kurį eis visa informacija. Zend_Registry - skirtas saugoti informacijai kuri naudojama visoje programoje. Zend_View, manau, visi puikiai gali suprasti, jog ši biblioteka tvarkosi su views, V raide iš derinio MVC. Zend_Db ir Zend_Db_Table naudojamos darbui su duomenų baze bei lentelėmis. Zend_Debug šita klasė turėtų padėti mums greičiau surasti klaidas, pažiūrėsim, ar iš tiesų. Zend_Auth - kadangi ruošėmės kurti sistemą su prisijungimu, tai mums reikalinga prisijungimo informaciją tvarkanti klasė.
$config = new Zend_Config(require 'application/config.php'); $db = Zend_Db::factory($config->database->adapter, $config->database->params->toArray()); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('db', $db);
Šios eilutės užkrauna prisijungimų prie duomenų bazės konfigūraciją, prisijungia prie duomenų bazės ir išsaugo informaciją tolesniam naudojimui.
$frontController = Zend_Controller_Front::getInstance(); $frontController->throwExceptions(true); $frontController->setControllerDirectory('./application/controllers'); // run! $frontController->dispatch();
Tai paskutinės index.php failo eilutės, kurios kreipiasi į pagrindinį valdiklį ir liepia mūsų sukurtai programai veikti. Tiesa, jūs nieko nepamatysit, nes kol kas mes nesukūrėm nė vieno vaizdo, nė vieno valdiklio, nė vieno modelio.
Pats laikas tai būtų padaryti, bet prieš tai susikurkime porą lentelių:
pirmiausia lentelę, kurioje saugosim užrašus:
CREATE TABLE `demo_notes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL DEFAULT '', `story` text NOT NULL, `created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) );
Na, ir vartotojų lentelę
CREATE TABLE demo_users ( id int(11) NOT NULL AUTO_INCREMENT, login varchar(80) DEFAULT NULL, password varchar(40) DEFAULT NULL, PRIMARY KEY (id) );
Norint pamatyti, ar kas nors veikia pirmiausiai reikia įsivesti keletą duomenų rankiniu būdu, manau, tą sugebėsit padaryti ir be mano komentarų.
Laikas vėl parašyti šiek tiek kodo, einame i direktoriją application\controllers ir susikuriame failą IndexController.php. Visų valdiklių pavadinimai turi baigtis žodžiu Controller.
class IndexController extends Zend_Controller_Action { function indexAction() { $view = new Zend_View(); $view->setScriptPath('application\views\scripts\index'); $view->render('index.phtml'); } }// end of class
indexAction() - tai veiksmas, kuris bus atliktas kreipiantis į pagrindinį valdiklį. Šiuo atveju tiesiog atvaizduojamas pagrindinis vaizdo failas, kurį mes tuoj pat ir susikursime. Atkreipkite dėmesį, jog visi veiksmai turi baigtis žodžiu Action.
Vaizdo failai standartiškai saugomi phtml formate. Mums reikia nueiti į application\views\scripts direktoriją ir joje susikurti direktoriją index, kurioje bus saugomi visi pagrindinio valdiklio vaizdo failai.
Kol kas mano index.phtml turinys bus :
echo 'Labas pasauli!';
Šaunu, pamatėm, kad viskas veikia dabar būtų neblogai prisijungti prie duombazės ir atvaizduoti šiek tiek duomenų. Kad tą padaryti turime susikurti pirmą modelį. Nueiname į direktoriją application\models ir susikuriame failą Notes.php
class Notes extends Zend_Db_Table { protected $_name = 'demo_notes'; }
Dabar grįžkime į pagrindinio valdiklio funkciją IndexAction ir papildykime ją…
Duomenų atvaizdavimas nėra sudėtingas. Bet teko daug dokumentų perskaityti ir ankstesnį, IndexAcion kodą pakeičiame į:
function indexAction() { $this->initView(); Zend_Loader::loadClass('Notes'); $note = new Notes(); $this->view->note = $note->fetchAll(); }
Taip pat reiks pakeisti ir index.phml kodą:
<table> <?php foreach($this->note as $note) : ?> <tr> <td><?php echo $this->escape($note->title);?></td> <td><?php echo $this->escape($note->story);?></td> </tr> <?php endforeach; ?> </table>
Dabar galim paploti sau. Pagaliau atvaizdavom duomenis iš duomenų bazės. Realiai parašėm vos kelias kodo eilutes, tačiau tam aš sugaišau daugiau nei tris valandas.
Pirmieji įspūdžiai
Tas, kuris sakė, kad Zend Framework panašus į Ruby on Rails, mažų mažiausiai nematė, bent vieno iš šių dviejų dalykų (labai tikėtina, kad abiejų). Kita vertus, kodo parašyti reikėjo ne tiek ir daug, tiesiog naujokui pradėti gana sudėtingas dalykas. Artimiausiu metu pasitengsiu užbaigti kurti šitą užduotėlę ir papasakosiu jums, kaip sukurti prisijungimą.
2008-01-21 | 14:16
Vajė, kiek čia visko daug ir kaip čia viskas nepatogu :(
2008-01-21 | 14:26
Man viskas atrodo gan gražiai, ypač kai lietuviškai parašyta tai gali straipsnį skaityt kaip pasaką. Gal naujokams ir sunkiau perprasti Zend Framework, bet manau išsiaiškinus ir pasinagrinėjus tikrai butų smagu jį naudoti…
2008-01-21 | 15:07
Nė vienas klonas nėra tiek pat geras, kaip pats originalas (RoR => ZF). Tą patį bandė daryti ir CakePHP.
Galėtum parašyti kaip ten reikalai su įskiepiais, nes prisijungimas su ZF man buvo tikras skausmas. 24 eilutės kodo vien užklausai pagal duotus parametrus, tiesa, čia pagal tutorialą pardinukams.
Na nežinau, man ZF yra didelis didelis. Tiesa, RoR trūkumas (bent Lietuvoje) - mažai hostingo sprendimų ir tiek.
2008-01-21 | 15:17
Kur išgirdai ? Oficialiuose šaltiniuose apie tai tikrai nemačiau. RoR ir ZF žiauriai skiriasi.
MVC projekto struktūrą iškarto sugeneruoti galima pasitelkus Zend Neon pagalba. :)
Zend pasižymi vienu privalumu (kai kam ir trūkumu). Tai nėra VIEN MVC karkasas. Tu gali daryti projektą includindamas tam tikras ZF dalis ir gali daryti remdamasis ZF pateikiamomis MVC galimybėmis. Todėl jis kolkas ir neturi pradinės sugeneruotos struktūros - tai paliekama tavo laisvei.
Vat, CakePHP būtent bando perkelti RoR į PHP. Ir manau tai jiems palyginus neblogai sekasi. Žinoma su RoR nėra ką lyginti, bet juk šaunu kad bent jau kažkas daroma.
Keep up the good work. Laukiam sekančių straipsnių.
2008-01-21 | 15:27
NePo, labai supykau ant tavęs. :D
Aš vėl pakartosiu frazę (neatsimenu kieno), kurią kartoju šimtus kartų, bet dar kartą matau pakartosiu: “Jei sukursi daiktą, kuriuo galės naudotis ir kvailiai, tai tik kvailiai juo ir naudosis”.
O dabar rimtai: NePo, matau, kad tu irgi nelabai matęs kažkurio iš tų dviejų dalykų. Vieną tu įvardini kaip super-duper paprastą (RoR) ir turbūt ten RoR tinklapyje taip ir parašyta ir taip yra, o apie kitą (ZF) tu išgirdai, kad jis yra bandymas padaryti kažką panašaus į RoR ant PHP. Aš dabar nueinu į framework.zend.com - ir galvoju ar tikrai ten taip parašyta. Randu štai ką:
Niekur nieko…
Taigi, ką aš įžvelgiu straipsnio įžangoje ir išvadoje - nesusipratimą. Kodėl? Todėl, kad Zend Framework orientuotas į profesionalus ir profesionalius sprendimus.
Ir “simplicity” visiškai nereiškia tokio kodo:
:D Sarkazmas… Paprastumas profesionalui reiškia tai, kad jam nereikės krūvą kartų perrašinėt to paties, kad jam viskas bus išdėstyta patogioje struktūroje ir panašiai.
Beje, Ruby ne pirma kalba, kuria kažką parašyti gali netgi nieko neišmanantis žmogus.
Davai, prisiminkit LOGO vėžliuką, ten gi viskas tas pats. Ten gi viskas paprasta
Gal ne visai tiksliai, bet… Ruby man kažkuo į LOGO užneša.
Ir galų gale, kas per daug paprasta - tas irgi nesveika.
P.S. Dabar čia prasidės fleimas, bet mano išvada tokia - jeigu reikės aš programuosiu nors ir su asembleriu - svarbiausia, kad tai būtų patogu ir paprasta MAN, o ne kažkas taip TEIGTŲ.
Ačiū už dėmėsį. ;-)
2008-01-21 | 16:19
Kartais kai kurie geek’ai bando pakeisti pasaulį (arba kažką įrodyti) neteisingom priemonem ar metodais.
Daug nesiplėsiu, nes man čia primena amžinuosius karus tarp Linux ir MS.
Tik trumpai: “stupid sells best”. Čia “stupid” != “simple”.. tokie yra rinkos poreikiai..
2008-01-21 | 17:29
Atsakymas antraštei: nenorim PHP sudėtingai.
Pastaba Sepai: Logo yra Lisp variantas, Ruby kūrėją irgi įkvėpė Lisp. Todėl jos ir panašios.
2008-01-21 | 21:05
3 valandos pirmai aplikacijai nėra daug. Zend Framework’as yra palaidų komponentų rinkinys ir nebūtina jų visų naudoti.
“Norint dirbti su Zend Framework jums reikės: * daug PHP praktinio programvimo žinių; * praktinio supratimo kas yra OOP; * supratimo kas yra MVC ir su kuo jis valgomas.”
Kadangi Zend Framework’as nėra mechanizmas, kuris automatiškai veikia, o tiesiog duoda komponentus, kuriuos susiklijuoti pačiam tenka, tai ganėtinai suprantama, kad php žinių reikia. Bet kam php programuotojams įrankis, kuriam valdyti nereikalingos php žinios?
Objektinis programavimas - PHP5 atnešė nemažai naujų galimybių ir Zend Framework’as bando jas išnaudoti. Kuo blogai?
Supratimas apie MVC visiškai nereikalingas. Gali drąsiai rašyt aplikaciją su visais Zend Framework komponentais išskyrus Zend_Controller. Niekas nedraudžia, niekas nesako, kaip tau ką daryt.
P.S. Kuo tokia jau nesaugi XML/INI konfiguracija? Ir beje, kaip tu sugebėjai nerasti PHP konfiguracijos?
http://framework.zend.com/manual/en/zend.config.html#zend.config.introduction
Pats pirmas Zend_Config dokumentacijos pavyzdys demonstruoja, kaip naudoti konfiguraciją iš php masyvo.
2008-01-21 | 21:07
[…] Jei esate programuotojas arba domitės šios srities naujovėmis, NePo supažindins su ganėtinai šviežios technologijos „Ruby on Rails” galimybėmis… […]
2008-01-21 | 21:12
http://devzone.zend.com/article/2537-PHP-Abstract-Podcast-Episode-19-Glue-Frameworks-vs.-Full-Stack-Frameworks
RoR lygint su ZF, tas pats kas .NET su PHP
2008-01-21 | 21:15
Nelabai supratau straipsnio autoriaus verdikto. zudyti ZF ar pasigaileti. Pats asmeniskai naudoju ZF ir vargo nematau. viskas labai aisku, suprantama. su RoR nelyginsiu nes pastarojo nesu naudojes. sako kad cakePHP yra jam artimas. bandziau. nepatiko nes per daug viskas “susabloninta”. pavyzdziai “kaip iskepti app per 15min” atrodo grazus ir kabinantys taciau kai pradedi daryti sudetingiau prasideda sunkumai. ZF siuo atveju daug lengviau issisavinau. zinoma galima rasti ir nesuprantamu featuru. pvz dauguma validatoriu taciau niekas neliepia ju naudoti :)
2008-01-22 | 10:01
Ponas autoriau, gal galetumete placiau pakomentuoti sita dali:
“Pasirodo, kad Zend supranta dvieju tipų konfigūracinius failus XML ir INI. Mano smegenys tokių konfigūracinių failų nepriima, formatai kurie nėra interpretuojami man atrodo nesaugūs, ”
?
2008-01-22 | 12:21
Esu išbandęs visus rimčiausius PHP frameWorkus, todėl manau, kad galiu pasakyti savo nuomonę.
CakePHP yra per daug RoR’iškas, t.y. nukopijuotos ir gerosios ir blogosios RoR savybės, taip tai neblogas frameWork’as, bet mano supratimu jam truksta lankstumo.
ZF - tai Zend’o bandymas įšokti į nuvažiuojantį traukinį, deja nelabai sėkmingas. Nors klasių rinkinys tikrai vertas dėmesio.
Symfony - apskritai tobulas daiktas. Be kita ko galima prisijungti ZF klases per ZF Bridge’ą, pajungimas tikrai gerai veikia, pats bandžiau.
Tiesa norint išnaudoti gerasias Symfony savybes reikia didelių PHP žinių arba bent neeilinio intelekto.
Žodžiu rimtiems projektams aš renkuosi Symfony.
2008-01-22 | 17:58
Na cia tu ir isgyrei Symfony, gal jis ir geras daiktas, bet tikrai ne tobulas ir pagrindinis jo minusas yra greitis kuom jis labai atsilieka nuo cakePHP ar codeIgniter. O siaip manau, kad prie betkurio frameworko reikia ilgai padirbeti tik tada isnaudosi jo visas galimybes.
2008-01-22 | 23:16
Sepa, man mažų mažiausiai keistas tavo šūkis “lengva = debilams”. Tai, typo, programuokim viską su assembleriu, - nes ir pats PHP buvo padarytas dėl tam tikrų patogumo ir paprastumo priežasčių. O juk tai ne g33k.
2008-01-23 | 3:23
To NePo:
CakePHP, Zend Framework, Prado, Codeigniter ir t.t.
norint padaryti HelloWorld(juk visi zino kas tai yra) aplikacija/scripta yra tikrai sudetingas dalykas, nei palyginus su echo “Hello World”;
o kam, o kam, o kam?
As ivardinciau CakePHP/ROR(ir jie tikrai nera panasus) i tokius framework, kurie orentuojaci i “hellowworld” ir siektiek daugiau web scriptu kurima, taciau sudetingi projektai realizuojami sunkiai. Kodel? Nes auto konfiguracija yra maximaliai isvystyta, lakstumo maziau. Aisku del lanskstumo yra ir blogesniu pavyzdziu kaip Prado ar Borland RAD framework.
Jei nori paprastumo: rasyk echo “world”.
Zend framework sukurtas vidutinems arba didialioms svetainems, todel naudingumas atsiranda tada, kai kuri sudetingesnene/prapleciama aplikacija.
Sitas straipsnis klaidina ir trugdo vystytis web/php ir programavimo praktikoms Lietuvoje. Geriau jau ji istrintumet. Gaila, nes autorius nesuvokia apie ka raso. Sakau - echo “world”; Pradek skaiciuoti eilutes, koda ir “suprasi”, kad visi framework “blogi”.
2008-01-23 | 17:35
Karoli, prie ko čia echo “Hello world”; ? Šitas pavyzdys parodo kokia yra framework struktūra :) Faktas kad niekam nereikia frameworko kad išvestų labas pasauli. Bet tai yra standartinė pirmoji programa. Ir ją padarant visur sulygini kur kiek kaip ir ką reikia padaryt :)
2008-01-24 | 17:50
Cia neparodyta framework struktūra. Cia parodyta, jog plugn and play budu situo framework nepasinaudosi. Ir isreiksta visiskai nepagrysta kritika apie ji, lyginant su visai kitokio tipo framework’ais.
2008-01-24 | 20:20
Brangus Karoli, tavo ar kitų išmanančių žmonių (kiek supratau Sepa irgi išmano) straipsnių nemačiau…
Jeigu moki geriau, parašyk, pasidalink savo žiniomis.
Pamatei klaida įvardink konkrečiai, pataisysim.
Kritikuoti gali visi, bet dažniausiai kritikuoja tie kurie nieko nedaro ir nieko nežino :)
O kam tenka kritika?
Tie kurie sako, kad nugalėtojų niekas neteisia, stipriai klysta.
2008-01-24 | 23:17
Internete ieškojau frameworkų benchamrkų, tačiau esu radęs tik senų versijų (http://paul-m-jones.com/?p=236), arba kur net nėra ZF (http://www.sellersrank.com/web-frameworks-benchmarking-results/).
2008-01-25 | 22:33
Neblogas straipnis, bet su tais “sudėtingumais”, “nepatogumais” ir pan., tai juokinat… Kai rašai didelią sistemą ir nenaudoju objektinio programavimo, o tiesiog struktūrinį, tai iš tiesų kodas tampa žymiai sudėtingesnis, nes viskas tarsi susimala į krūvą. O kai naudoji OOP tai viskas tarsi suskirstoma / išskaidoma į savo dalis ir greitai galima susorientuoti kas, kur, ir kaip.. Ypač aiškiai matomas skirtumas, kai tarkim rašai kokią scripting language ant C ir C++… ( Na gal truputį ne į temą, bet norėjau išsireišt :-) )
2008-01-26 | 18:34
NePo == John C. Dvorak
2008-01-31 | 11:49
[…] kaip sukurti sistemą su prisijungimu, tai ir pratęsiu savo pasakojimą pradėtą straipsnyje: Norit PHP sudėtingai?. Prieš pasakodamas toliau, norėčiau padėkoti visiems už protingus komentarus, ypač neworld […]
2008-01-31 | 20:54
Galėtų čia atsirasti komentarų prenumerata… Dabar skelsiu Vidmantui elektroninį antausį už šitą :) :
Vidmantai, kad programuokim asembleriu pasakei tu, aš sakiau - programuosiu nors ir asembleriu. Va kai prasideda interpretacijos tai gaunasi blogai. Ką aš norėjau pasakyti, kad šito straipsnio įžanga ir išvada yra nulinės vertės man.
Aš niekada neimu rimtai/įvertinu nuliui ir t.t. ir pan. straipsnių, kuriuose kažkokie freimworkai maišomi su žeme, o kažkokie aukštinami kaip iš kitos visatos atėję. Palyginimus - irgi paskaitau, bet ne viską priimu. Aš renkuosi tai, kas man patogu. Aš orientuotas į profesionalizmą o ne grožinės literatūros rašymą Eclipse IDE lange (this was a sarkazm abaut ruby), todėl man ZF patogu ir tinka, kitiem natūralu, kad ne.
Kas be ko, nėra man tas ZF kaip inkaras nugaroje įsmigęs, kaip kad gali pasirodyti. Norisi patyrinėti ir daugiau variantų: tarkim Symfony ir CodeIgniter. Gali sakyt, kad čia vėl PHP. Ok, pasižiūrėk kas yra Django arba TurboGears - uber kūl supa dupa Python freimworkai, kuriuos aš labai mylėčiau, jeigu rasčiau kur dažniau pritaikyti ir kur pahostinti jų projektus.
Tai va, iš tiesų straipsnis tai šaunus kaip geras introductionas kaip padaryti pačią pradžią, bet tie vertinimai pradžioj ir pabaigoj… Sakau dar kartą - žmonės - žiūrėkit kas jum patogu, o ne kitus verskit naudoti kažką. :)
2008-01-31 | 21:17
Va, dar ir NePo atsakysiu, kur jis rašo:
Visų pirma dėl tos kritikos ir klaidų įvardinimų - NePo - aš tau konkrečiai įvardinau tavo klaidą - tu remiesi trečiųjų šalių pasakojimais ir nusišnekėjimais, kai teigi, kad ZF - tai RoR PHP kalba. Aš tau iš oficialaus straipsnio net pakopinau ZF aprašymą idėjinį. Nulis reakcijos iš tavo pusės… Nežinau nežinau…
O dabar dėl to “patylėk, jei nieko nerašai geriau” papasakosiu realią istoriją įvykusią prieš keletą metų (jei tikitės, kažko apie programavimą tai galit baikt skaityt ties dvitaškiu, nes bus šiek tiek OFF-TOPIC čia):
Kažkas ne taip, ane? Pasirodo, velionis niekam nesigirdamas visą savo gyvenimą (na turbūt nuo tada kai pradėjo dirbti) aukodavo nemažas sumas klebonijai niekam nesigirdamas.
O dabar prisiminkim hiltonus, turnerius, bransonus ir kitą grietinę - jie aukoja milijardus dorelių labdarai, juos žino visas pasaulis.
Bet kai reikės savo pasturgalį kišt po velėna - kas bus svarbiausia: kas tu per žmogus ar kiek tu priaukojai (arba dar ir apsiskelbei paaukojęs - išvis garbėtroška)? Aš manau pirmas variantas.
Istorijos moralas: kad mes su Karoliu straipsnių nerašom, tai nereiškia, kad jau visiškai nieko neišmanom ir rėkaujam čia bilen ką, kad tik tau blogiau būtų :D Visiškai ne, tiek aš tiek Karolis tau labai aiškiai ir konstruktyviai paaiškinom, kas tavo straipsnyje negerai. Savo pastabas parašiau šito komentaro viršuje, o Karolis manau aiškiai parašė, kodėl blogai yra lyginti freimworkus tarpusavyje.
Taigis tiek ir žinių… Tikrai galėtumėt padaryt komentarų prenumeratą :)