Přejít k navigační liště

Zdroják » PHP » Yii mieša karty PHP frameworkov

Yii mieša karty PHP frameworkov

Články PHP, Různé

Framework Yii (yes it is) je pomerne mladým hráčom na poli PHP frameworkov. Má však šancu miešať kartami na preplnenom trhu s frameworkami pre tento jazyk. Panuje okolo neho stále väčší ruch a záujem komunity okolo neho narastá. Poďme si ho preto v stručnosti predstaviť.

Autorom Yii frameworku je Qiang Xue, čínsky programátor ktorý okrem iného stojí za PHP frameworkom PRADO. Verzia 1.0 bola vydaná 3.Dec 2008 po takmer ročnom vývoji. Na domovskej stránke o ňom autor vyhlasuje, že je rýchly, bezpečný a profesionálny, určený pre vývoj WEB 2.0 aplikácií. Stavia nad štandardným konceptom MVC, pričom obsahuje vlastné riešenie pre modelovú vrstvu s využitím patternu Active Record.

Je bohato vybavený a pritom veľmi kompaktný (light-weight), poskytne vám nástroje pre:

  • abstraktný aj objektový prístup k databáze
  • validáciu užívateľských vstupov (validátory sú spoločné pre formuláre aj Model)
  • ACL
  • i18n a l10n
  • cache vrstva (aj fragment caching)
  • transparentnú podporu komponentov jQueryUI (AJAX, serverový kód, widgety pre šablóny)
  • podporu pre skiny a themy
  • jednotkové a funkčné testy
  • scaffolding pre automatické generovanie kódu

V neposlednom rade je treba spomenúť dokumentáciu, ku ktorej patrí vynikajúca užívateľská príručka, Wiki, API referenčná príručka alebo niekoľko tutoriálov. K štúdiu Yii je dostupná aj tlačená kniha Agile Web Application Development with Yii 1.1 and PHP5. Online pomoc je možné hľadať na oficiálnom fóre alebo na IRC. Yii má aj veľmi živý twitter kanál, na ktorom takmer každý deň pribudne niekoľko tipov a trikov, ktoré komunita zapísala do Wiki.

Framework až nezvykle tlačí vývojárov k využívaniu konzoly. V stiahnutom archíve sa prekvapivo nenachádza žiadny skeleton pre začatie nového projektu, pritom však framework vyžaduje pomerne striktnú adresárovú štruktúru. Nový projekt je preto nutné vytvoriť pomocou scaffoldingu – spustením konzolovej aplikácie v zložke s frameworkom:

$ cd /var/www/projectx/framework
$ ./yiic webapp ../www_root

Tento príkaz pripraví skeleton nového projektu s niekoľkými Views a widgetmi pre dynamické menu a drobečkovú navigáciu

Adresárová štruktúra projektu v Yii vypadá takto:

Samotný kód aplikácie sa nachádza v zložke www_root/protected. Názvy pod zložiek nepotrebujú komentár. Zložka protected ma v kontexte projektu špeciálny význam – patrí pod jeden z aplikačných aliasov, konkrétne application. Aliasov je niekoľko, využívajú sa hlavne pri práci s filesystémom (napr. upload obrázkov). Filesystem cestu z aliasu získame kdekoľvek statickým volaním

Yii::getPathOfAlias(NAZOV_ALIASU);

Zoznam všetkých systémových aliasov:

system cesta k Yii frameworku
application cesta k zložke protected (application’s base directory)
webroot cesta k document_root webovej aplikácie, (zložka s  index.php)
zii cesta to knižnice zii (okrem iného jQuery UI komponenty)
ext cesta k zložke pre 3rd party knižnice

Metódy pre prácu s aliasmi dovoľujú pracovať s hierarchiou zložiek pomocou bodkovej konvencie. Napr. import konkrétnej triedy môžeme vykonať pomocou:

Yii::import('ext.Zend.Pdf.Color');
Yii::import('ext.Zend.Pdf.*'); // importuje celu zlozku

Yii používa jednoduchý autoloader, prehľadávané cesty sa nastavujú v konfiguračnom súbore (v prípade webovej aplikácie  protected/config/main.php).

'import'=>array(
    'application.models.*',
    'application.components.*',
    'application.extensions.*',
),

Statická trieda Yii predstavuje univerzálneho, všade dostupného pomocníka, ktorý umožňuje získať zaujímavé objekty kdekoľvek v projekte (dnes sa však už tento koncept považuje za prekonaný, do popredia vstupuje technika Dependency in­jection). Najčastejšie budete pravdepodobne využívať volanie Yii::app(), ktoré získa bežiacu aplikáciu. Webovú reprezentuje objekt CWebApplication, ktorý poskytuje napr. tieto properties (komponenty):

request CHttpRequest obálka nad prišlým HTTP požiadavkom
session CHttpSession nízko úrovňová obálka nad PHP session
user CWebUser vysoko úrovňová obálka nad PHP session, abstrahuje návštevníka stránky
urlManager CUrlManager dvojsmerný URL router
clientScript CClientScript manažér JS a CSS

Na tomto mieste spomeňme, že v Yii sú všetky triedy (okrem Yii) prefixované C (viď. vyššie). Obmedzí sa tak kolízia s vašimi triedami a triedami iných knižníc.

Nový projekt obsahuje vlastnú kópiu aplikácie yiic v zložke protected. Pre scaffoldovanie v rámci samotného projektu je nutné využívať tento! Aplikácia yiic poskytuje ešte niekoľko ďalších príkazov okrem webapp, stačí ju spustiť bez parametrov

  • message – vyhľadá nepreložené frázy vo Views a vygeneruje prekladové súbory vo forme PHP arrays
  • migrate – podpora pre databázové migrácie
  • shell – interaktívny shell v bežiacom Yii projekte
  • webapp – vytvorenie nového projektu

Za zmienku stojí príkaz shell, ktorý poskytuje vlastnú sadu príkazov:

Yii v tomto veľmi pripomína veľké frameworky ako Symfony alebo RoR a umožňuje pomerne mocné prototypovanie aplikácie. Pomocou niekoľkých príkazov v konzoli je možné vytvoriť jednoduché administračné rozhranie (CRUD nad tabuľkami), stačí správne nastaviť pripojenie k databáze v konfiguračnom súbore.

Ako sme už spomenuli, interaktívny shell beží v rámci Yii projektu, je teda možné spúšťať napr. metódy nad vašimi Modelmi. Samotné vytvorenie Modelu z existujúcej databázovej tabuľky a získanie záznamov z tabuľky je otázkou dvoch príkazov v interaktívnom shelli:

Scaffold automaticky pripravil aj podklady pre unit testovanie Modelu. Projekt je možné prototypovať aj pomocou webového rozhrania nazvaného Gii, ktoré je webovou kópiou interaktívneho shellu. Stačí len odkomentovať príslušnú sekciu v hlavnom konfiguračnom súbore, nastaviť heslo a otvoriť správnu adresu v browseri.

Ešte sa zastavíme pri konzoli. Yii umožňuje vytvárať vlastné konzolové aplikácie rovnako pohodlne ako tie webové. Konzolové controllery reprezentované potomkami CConsoleCommand predstavujú nové konzolové príkazy, ktoré pre vás spúšťa konzolový scafollder  yiic:

<?php // protected/commands/NewsletterCommand.php

class NewsletterCommand extends CConsoleCommand
{
    public function run($args)
    {
        if (empty($args)) {
            die("nAvaiable command(s): send, prepare-newnn");
        }

        switch ($args[0]) {
            case 'send':
                echo "sending newslettern";
                break;

            case 'prepare-new':
                echo "creating new newslettern";
                break;

            default:
                die("nERROR! Wrong or no command specified. Avaiable command(s): send, prepare-newnn");
              break;
        }
    }
}

ORM a formuláre

Ako sme už spomenuli vyššie, Yii disponuje vlastným ORM pre Modely. Využíva pattern Active Record – každý vytvorený Model zastupuje databázovú tabuľku. Nie je však úplne pravda, že Modely môžu byť iba databázového pôvodu. Pre generické Modely Yii ponúka triedu CModel, podstatne zaujímavejšie sú však odvodené typy: CActiveRecord a CFormModel. Pozrime sa najskôr na prvý.

CActiveRecord umožňuje klasické:

$application = new Application;
$applicaion->name = 'Sample application';
$appliction->author_id = '4';
$application->save();

Je treba upozorniť, že pred uložením automaticky prebehne validácia Modelu (možné zakázať prvým parametrom metódy save()). Pravidla sú uložené v samotnej definícii triedy Modelu ako PHP array (v Yii je všetko konfigurovateľné uložené ako PHP array). Scaffolder pri vytváraní nového Modelu nastaví vhodné pravidlá na základe definície stĺpcov v databázovej tabuľke:

public function rules()
{
    return array(
        array('name, author_id', 'required'),
        array('author_id',       'numerical', 'integerOnly'=>true),
        array('name',            'length', 'max'=>120),
    );
}

S pravidlami súvisia aj tzv. scenária Modelu. Modelu je možne oznámiť kontext, v akom sa má validovať. Napr. pri registrácii nového užívateľa, Modelu User nastavíme scenário insert, kedy sú vyžadované polia password a passwordRepeat. Naopak, keď užívateľ edituje svoj profil v administrácii, nevyplnené polia znamenajú, že užívateľ si nepraje meniť heslo a polia sa preto nebudú validovať. Modelu to oznámime nastavením scenária update. Validačné pravidlá môžu v takomto prípade vypadať takto:

public function rules()
{
    return array(
        array('email', 'required'),
        array('password, passwordRepeat', 'required', 'on'=>'insert'),
        ...
    );
}

Pohodlie programátora je dokonca zvýšené faktom, že hore uvedené dve scenária sú pre neho nastavované automaticky:

  • pri inštancovaní Modelu sa nastaví insert
  • pri načítaní Modelu z databáze sa nastaví update

Nad procesom však samozrejme máte plnú kontrolu:

$user = new User('registration');
if ($user->validate()) {
    // TODO

    $user->setScenario('vote');
    if ($user->validate()) {
        // TODO
    }
}

Pre viac detailov o validačných pravidlách si prosím naštudujte problematiku v užívateľskej príručke, kde okrem iného nájdete aj zoznam dostupných validátorov.

Pre načítavanie Modelov z DB poskytuje Yii celú plejádu find* metód. Najskôr však treba získať živú inštanciu Modelu:

$aplication1 = Application::model()->findByPk(1);
$aplications = Application::model()->findAll('author_id=:authorId', array(':authorId'=>4));

Všimnite elegantnú syntax techniky parameter bin­ding. Pre pokročilejšie dotazovanie je dostupný tzv. query builder:

$c = new CDbCriteria;
$c->condition = 'author_id=:authorId';
$c->order = 'name DESC';
$c->params = array(':authorId'=>4);

$applications = Application::model()->findAll($c);

Relačné ORM

WEB 2.0 aplikácie zhusta pracujú s previazanými údajmi v databázach, preto podpora pre relačné vzťahy nesmie v Yii ORM chýbať. CActiveRecord podporuje 4 druhy relácií:

  • BELONGS_TO, objekt je vlastnený iným objektom, N:1, napr. aplikácia má jedného autora
  • HAS_MANY, objekt vlastní mnoho podradených objektov, 1:N, autor má mnoho aplikácií
  • HAS_ONE, špeciálny prípad HAS_MANY, kde nadradený objekt môže vlastniť iba jeden podriadený objekt
  • MANY_MANY, typický M:N vzťah, aplikácia môže byt vo viacerých kategóriách, kategória môže obsahovať mnoho aplikácií

Ak vaša databáza podporuje referenčnú integritu a mate správne nastavené FK’s, môžete sa spoľahnúť že scaffold processing Modelov nastaví vaše triedy správne (relačné vzťahy je potrebné zapísať do tried Modelov). V prípade MANY_MANY je pri scafoldingu krajných Modelov automaticky rozpoznaná väzobná tabuľka. Model pre túto tabuľku nie je potrebné vytvárať. Pre ukladacie mechanizmy bez podpory FK je možné väzby zapísať ručne:

public function relations()
{
    return array(
        'author' => array(self::BELONGS_TO, 'User', 'author_id'),
        'tags' => array(self::MANY_MANY, 'Tags', 'applications_tags(application_id, tag_id)'),
    );
}

Scaffolding predsa len urobí drobnú chybku pri generovaní tried – v relačnom pravidle, v druhom prvku (odkazovaná trieda) neustále vyplňuje plurál (Users)! Dajte si prosím na to pozor.

Toto v Modeli vytvorí virtuálne properties, ktoré svoj obsah získajú lazy, pri prvom prístupe k takejto relačnej property. Ak vyžadujete načítanie relačných údajov už pri fetchnutí hlavného objektu (objektov), Yii vám poskytuje techniku nazvanú eager loading:

$applications = Application::model()->with('author')->findAll();

Do kategórie vyšší dívči už potom možno zaradiť SELECT podľa relačného stĺpca:

$c = new CDbCriteria;
$c->with = 'author';
$c->condition = "author.name='John Doe'";

$applications = Application::model()->find($c);

formuláre

Pre vývojára je najdôležitejšia možnosť definovať, vykresliť a spracovať formulár. Vynikajúca správa – v Yii je možné formuláre vykresľovať z inštancií CActiveRecord! Nemusíte ich teda nijako definovať. Dokonca ani vytvárať nejaké extra validačné pravidlá. Vďaka faktu, že formulár je reprezentácia Modelu vo View, má vývojár ušetrené množstvo práce. Postranným efektom toho je, že typ a vzhľad formulárového políčka je definovaný vo View šablone, tak ako je to najsprávnejšie. Príklad takej šablóny:

<div class="form">
  <?php $form = $this->beginWidget('CActiveForm', $options = array('id'=>'applicationForm')); ?>
    <div class="row">
      <?php echo $form->labelEx($application,'name'); ?>
      <?php echo $form->textField($application,'name'); ?>
      <?php echo $form->error($application,'name'); ?>
    </div>

    <div class="row">
      <?php echo $form->labelEx($application,'author'); ?>
      <?php echo $form->dropDownList($application, 'author', $application->getAuthorsDLdata()); ?>
      <?php echo $form->error($application,'author'); ?>
    </div>

    <div class="row buttons">
      <?php echo CHtml::submitButton('save'); ?>
    </div>
  <?php $this->endWidget(); ?>
</div>

Upozorníme len na riadok s definíciou selectboxu (dropDownList). Vyžaduje naplniť PHP poľom so schémou value=>display. Takéto pole je najvhodnejšie získať zo samotného primárneho Modelu (alebo staticky z relačného Modelu):

Class Application extends CActiveRecord
{
    ...

    public function getAuthorsDLdata()
    {
        $authors = Author::model()->findAll();
        $out = array();
        foreach ($authors as $author) {
            $out[$author->id] = $author->name;
        }

        return $out;
    }

    ...
}

Spracovanie formulára v Yii sa zvyčajne vykonáva v rovnakej akci, ktorá ho vykreslila. Vďaka tomu je vykreslenie validačných chýb prirodzené a nevyžaduje zbytočnú logiku.

Class SiteController extends CController
{
    ...

    public function actionUpdateApplication($id)
    {
        $application = Application::model()->findByPk($id);

        if (Yii::app()->request->getIsPost() && isset($_POST['Application'])) {
            $application->attributes = $_POST['Application'];
            if ($application->validate()) {
                $application->save(false);

                $this->user->setFlash('info', 'Update succeeded.';
                $this->redirect(array('/site/updateApplication', 'id'=>$id));
                Yii::app()->end();
            }
        }

        $this->render('updateApplication, array(
            'application'=>$application,
        ));
    }

    ...
}

Za mierne neintuitívne a nemoderné možno považovať manuálne naplnenie Modelu prijatými údajmi priamo z $_POST. Napriek tomu je však operácia bezpečná a novými hodnotami su prepísané len polia, ktoré majú definované validačné pravidlá. Nestane sa tak, ze by útočník mohol podvrhnúť request, v ktorom posiela napr. ID záznamu, a ten tak prepísal. Ak by predsa len nastala potreba meniť propery Modelu bez definovaného validačného pravidla, označte pole ako safe vo validačných pravidlach.

public function rules()
{
    return array(
        ...
        array('id', 'safe'),
        ...
    );
}

CFormModel

Ako sme už spomenuli vyššie, Modely nemusia mať len persitentné pozadie. Občas nastane potreba vytvoriť formulár bez akejkoľvek väzby na databázu, napr. formulár na vyhľadávanie. Takýto formulár je nutné manuálne definovať ako potomka  CFormModel:

<?php

class SearchForm extends CFormModel
{
    public $search;

    public function rules()
    {
        array('search', 'required'),
        array('search', 'lenght', 'min'=>3),
    );
}

S takto definovaným formulárom potom pracujeme (vykreslenie, spracovanie) úplne rovnako ako s CActiveRecord, tak ako sme naznačili vyššie.

View šablóny, routovanie

Každý správny MVC framework obsahuje mechaniku vykresľovania View šablón a Yii nie je výnimkou. Implementuje klasické dvojfázové vykresľovanie zvnútra=>von, tj. šablóna-akcie=>layout. View šablónu sme si už ukázali pri vykresľovaní formulára. Mohli ste si všimnúť, že sa jednalo iba o klasické PHP značkovanie. Yii skutočne neposkytuje žiadny šablónovací jazyk a do vetvy 1.1 sa ani neplánuje. Nakoľko ani neimplementuje žiadny response objekt, nie je možné v šablónach využívať filtre. Dôležitým faktom je, že $this v šablónach ukazuje na aktuálny Controller. Môžeme tak aspoň z časti využívať helpre vo forme jeho metód. Existuje aj veľmi užitočný pomocník (helper container) – CHtml, ktorý obsahuje množstvo statických metód pre každodennú potrebu.

Najčastejšie v šablónach narazíte na potrebu vykresliť predané údaje a generovanie linkov na HTTP akcie. Predávanie údajov do šablóny sme mohli vidieť v príklade spracovania formulára, keď sme do šablóny predali inštanciu objektu Application. Pri vykresľovaní dynamických údajov je treba dbať na bezpečnosť a údaje pred vypísaním ošetriť:

<?php echo CHtml::encode($application->name); ?>

Generovanie linkov z routra je možné riešiť dvojako:

<a href="<?php echo $this->createUrl(ROUTA, $urlParams=array()); ?>">text linku</a>

alebo

<?php echo CHtml::link(TEXT_LINKU, array(ROUTA, $urlParams) $htmlOptions=array()); ?>

Routu predstavuje destinácia, na ktorú link mieri vo forme /modul/controller/akcia. Modul nie je povinné uvadzať, ak nepoužívate modulárnu aplikáciu alebo nechcete opúšťať aktuálny modul. Príklad linku aj s dodatočnými parametrami:

<a href="<?php echo $this->createUrl('/news/create', array('lang'=>$this->lang)); ?>">pridať novinku</a>

Takéto vytváranie URL bude správne reflektovať zmeny vo vašich routovacích maskách. Konfigurácia masiek je uložená v protected/config/main.php, ale jej popis je nad rámec článku. V užívateľskej príručke nájdete vyčerpávajúci výklad problematiky.

Widgety

Aj s widgetom sme sa stretli pri vykresľovaní formulára. Widget si možno predstaviť ako vykresliteľný blok s vlastnou akciou a šablónou. Do View šablóny sa umiestni volaním:

<?php $this->widget('FooWidget', $properties=array('uid'=>$user->id)); ?>

Najjednoduchší widget by potom mohol vypadať

<?php

class FooWidget extends CWidget
{
    public $uid;

    public function run()
    {
        $this->render('fooWidget', array(
            'user' => User::model()->findByPk($this->uid)
        ));
    }
}

šablóna

<div id="fooWidget">
  <?php echo  CHtml::encode($user->name);?>
</div>

Widgety je vhodné umiestniť do zložky protected/widgets, šablóny prídu do protected/widgets/views. V konfiguračnom súbore alebo inde v projekte je potom nutné zaistiť ich import do aplikácie.

Zhrnutie

Yii je veľmi bohatý framework. V tomto sumáre sme pokryli len základné vlastnosti a schopnosti, ktoré sú nutné pre prvé kroky s frameworkom. Vyznačuje sa kompaktnosťou, výkonom ale hlavne výborne spracovanou dokumentáciou. Vývoj Yii je veľmi živý a narastajúcu popularitu dokazuje aj umiestnenie v nedávnom experimente, kde bola určená popularita webových frameworkov podľa množstva topicov na Stack Overflow.

Za nevýhody možno považovať absenciu šablónovacieho jazyka, nepoužívanie najmodernejších techník (response objekt, statická trieda Yii), ale aj neprehľadné kombinovanie anglických a čínskych topicov vo výsledkoch vyhľadávania na oficiálnom fóre.

Yii si istotne zaslúži pozornosť a istotne sa o svoju pozíciu pobije. Nech aj tento článok prinesie jeho väčšiu popularitu v česko-slovenských kotlinách.

Komentáře

Subscribe
Upozornit na
guest
84 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
G

first! good work, srigi!

sidik

Díky za článek. S Yii si teď hodně hraju, protože mi vyhovuje jak snadno se s ním pracuje a jak snadno ho lze přiohnout podle vlastních představ. Třeba adresářová struktura jde snadno změnit (protected mám přejmenované na app a mimo adresář www_root).

Kromě toho je to fakt rychlý a vývoj v tom je radost. U ostatních frameworků (Nette, CakePHP, Zend) jsem stále narážel na něco, co mi práci komplikovalo nebo mě to minimálně vytáčelo. Tady jsem zatím na nic nenarazil.

Jediné co mi vadí, je prefix některých objektů ale to je holt daň za absenci jmenných prostorů.

marek

ďakujem za výborný článok, práve som po yii pokukoval, lebo nette vyzerá ako nekonečný príbeh bez dokumentácie… ale mám otázku, je v yii niečo ako ladenka?

sidik

Něco takového tam je, dokonce lepší (co se týče reportovaných informací). Nicméně zatímco laděnka zachytí v podstatě všechno, Yii debugger se občas nechytí.

Patrik Votoček

Neměli by jste ukázku („Bluescreenu“)?

Filip Procházka

Výborný článek! :) Jenom se teď nemůžu zbavit představy, že Yii je klon RoR.

Martin Soušek

Proč používat parodii, když můžu mít originál? Navíc ten originál získám s jazykem, který frameworku umožňuje věci, o jakých se PHP ani nesnilo.

Já jsem přešel z PHP na Ruby a nelituju. Výhodou je i minimum lam.

sidik

Já jsem to zkoušel ale cokoliv psané v RoR, potažmo Ruby bylo tak nehorázně pomalé, že jsem se rád vrátil zpět k PHP.

Oldřich Vetešník

To jste asi dělal něco špatně, u mě to lítá lightning fast :).

Jinak tohle vypadá hezky, až budu něco potřebovat v PHP, tak hurá na to.

Pepa Chmel

Asi jste měřil rychlost v dev. modu :) Production nijak za rychlostí php nezaostává… ;)

Pepa

to mě baví jak v česku každej píše aplikace s milionama transakcí a každá milisekunda je pro něj kriticky důležitá :D

Jerry12

Ja bych videl vetsi problem v latenci. Req/s jde vyresit pomoci skalovani, ale kdyz trva zpracovani requestu 1200ms na vlaknu s pristupem k 3Ghz Xenonu, tak mas problem. Nad 700ms u zakladnich operaci uz to uzivatele s rychlym pripojenim nebo na intranetu omezuje. RoR historicky tenhle problem melo, ale na jeho obhajobu je potreba rict, ze se tak chova nejadna aplikace v Jave, .NETu a velka cast aplikaci v obrich PHP frameworcich jako je Zend nebo Symfony. Aktualni stav presne nevim, delsi dobu jsem tuhle problematiku neresil, takze je mozny ze zrovna RoR jsou stejne bleskurychly jako Django (v dobe kdy jsem se zajimal bylo jako jediny velmi rychly a pritom slo o plnotucnej framework).

Sekunda je dlouha doba, kdyz jde o interaktivitu.

Jerry12

Ja bych videl vetsi problem v latenci. Req/s jde vyresit pomoci skalovani, ale kdyz trva zpracovani requestu 1200ms na vlaknu s pristupem k 3Ghz Xenonu, tak mas problem. Nad 700ms u zakladnich operaci uz to uzivatele s rychlym pripojenim nebo na intranetu omezuje. RoR historicky tenhle problem melo, ale na jeho obhajobu je potreba rict, ze se tak chova nejadna aplikace v Jave, .NETu a velka cast aplikaci v obrich PHP frameworcich jako je Zend nebo Symfony. Aktualni stav presne nevim, delsi dobu jsem tuhle problematiku neresil, takze je mozny ze zrovna RoR jsou stejne bleskurychly jako Django (v dobe kdy jsem se zajimal bylo jako jediny velmi rychly a pritom slo o plnotucnej framework).

Sekunda je dlouha doba, kdyz jde o interaktivitu.

Pepa

Já jsem spíš narážel na to, že 99% čtenářů Zdrojáku šmrdlá nějaký blogy a cmska kde je traffic jeden člověk za hodinu, ale všichni mají plnou hubu řečí o rychlosti, protože si někde přečetli, že s tím měl problém twitter :-)

Tharos

Tak Twitter s tím problémy měl a vyřešil je tak, že RoR opustil :) (respektive ponechal jej jen v nenáročném frontendu). Z jejich prohlášení mám pocit, že kdyby se čas vrátil a oni šli znovu do vývoje, RoR už by nezvolili (i když takto konkrétně jsem to samozřejmě v žádném vyjádření nečetl).

Pepa

No jasně. Ale twitter na ty hranice narazil až když zpracovával terrabajty dat dennně. Takže budu rád až se dostanu do stejných problémů jako twitter, ale zatím to neřeším, stejně jako by to nemělo řešit 99% čtenářů Zdrojáku.

Rubysta

Já mám pocit, že RoR už nemají ani ve frontendu, ne?

Michal

Jo Twitter byl v ror proste proto ze je stejne jako ror od signalu, byla to jedna z jejich prvnich aplikaci na ror :-)

Hmmm

Ake veci napriklad? :)

Lebo ked niekto povie, ze A dokaze robit veci o ktorych sa B ani nesnivalo, tak to znamena, ze A vie len tolko kolko B, pripadne menej.

Fontyš

Konečně o lamu méně!

.

Ajo, takže používáš RoR, tak to seš velkej kluk..

ujovlado

myslim, ze takyto rozsiahly clanok o Yii som este v „Ceskoslovensku“ nevidel. parada srigi, zajtra.sk za nechyta! :)

Michal

Jeste by me zajimalo co mi ten framework nabidne oproti symfony2, z toho clanku mi pripada ze nic, naopak oproti nemu spoustu veci postrada.

Dik.

Tharos

S Yii jsem přišel velmi lehce do styku před několika měsíci při spoluúčasti na jednom zahraničním projektu a přestože to bylo jenom tak z rychlíku, líbil se mi. Chtěl bych využít autorova hlubšího vhledu a chtěl bych se ho zeptat, co se mu na něm líbí a naopak nelíbí oproti českému Nette? :) Který osobně preferuje a proč? Překvapuje mě, jak je komunita kolem Yii v ČR malá (pokud vím), většina vývojářů se nechytá ani na ten název (má osobní zkušenost, ale zase celou vesnici jsem neobcházel…).

LV

Komunita imo roste. Pred mesicem jsem hledal praci a asi na 5 interview se me ptali na zkusenosti s Yii (nemel jsem zadne, pouzival jsem zatim jine FW)

cleb

…Konečně článek o frameworku, který NENÍ Nette.

Nox

Na tomto mieste spomeňme, že v Yii sú všetky triedy (okrem Yii) prefixované C (viď. vyššie). Obmedzí sa tak kolízia s vašimi triedami a triedami iných knižníc.
Zlaté namespacy…

Nox

Jinak osobně mě Yii nijak neuhranul, ale samozřejmě je dobré že jsou různé frameworky, každýmu může sednout jiný. Trochu mi připomněl Kohanu, ale jsem rád, že jsem přešel k Nette (ještě Symfony2 vypadá dost slušně)

Hmmm

Ja po troch rokoch zase od Nette odchadzam. Nevyhovuje mi slaba dokumentacia oslabena roztriestenostou medzi verziami 0.9 a 2.0, nevyhovuje mi verzia cislo 2 a neviem ake configy, ktore musim pri nej riesit (aspon tak to vyzeralo podla prveho pokusu so skeletom Nette2.0) a este par veci by sa naslo.

Takze bud Yii alebo CodeIgniter… Hm

Tharos

Nechci, aby to vyznělo nějak urážlivě, ale ty tři roky tedy předpokládám byly ve znamení těžce svátečního používání. Já osobně jsem ve styku s Nette cca druhým rokem (a taky ne úplně denně) a po takové době běžného používání mně nějaká dokumentace již vůbec netrápí, protože na vše mi stačí API reference a zdrojové kódy. Moje představa je, že člověk po třech letech práce v Nette nepotřebuje ani to a že mu stačí jenom sledovat nové commity v repositáři. :)

To, že někdo po třech letech framework neovládl, může být pro neznalého vskutku odstrašující, ale já bych zde opravdu neviděl vinu ve frameworku…

Nette určitě není nejjednodušší framework a asi prostě není úplně pro každého… Faktem ale je, že je u nás v zemi dost protlačované a občas mám pocit, že se někteří nově příchozí rozhodli svou programátorskou kariéru zahájit naučením se Nette a pak až samotného PHP. :)

Hmmm

Sviatocne pouzivanie to nebolo. Prvy rok este ako tak ano, to som vtedy pouzival iba niektore komponenty Nette, ako formulare napriklad, a nie cely system.

Ale potom neskor som v tom zacal robit viac veci. Na take bezne a nie prilis narocne projekty sa to pouzit da. Ale akonahle pride nieco mimo toho, tak nastavaju problemy.

Okrem toho sa mi velmi nepacia snahy autorov do toho nasilu tlacit vlastne dalsie projekty ako notorm a adminer.

Čelo

„Na take bezne a nie prilis narocne projekty sa to pouzit da“ — přesně tak. Akorát, že bych namísto Nette rovnou mluvil rovnou o celém PHP a jeho fw.

David Grudl

Pokud dáš ještě Nette šanci, mám pro tebe dobrou zprávu. Verze 2.0 beta bude vydána v pátek 27. 5. 2011, ostrá by pak měla následovat krátce poté.

A dne 1. 6. bude spuštěna zcela nová dokumentace v českém jazyce.

Hmmm

Nie, dakujem. Prave 2.0 je to co sa mi nepaci. Alebo teda zatial na mna dobry dojem neurobila.

Za to sa mi cim dalej paci CodeIgniter a jeho triedy na vselico mozne (vytvaranie tabuliek, typografiu,…).

blizz

ja tiež odchádzam od nette, podľa mňa je to síce perfektný framework, hlavne sa mi páčia šablóny latte čo mi ale vadí je pomalý a zastaralý jazyk/platforma – PHP, ktoré nemá zatiaľ ani také základné veci ako lambda výrazy, alebo closures. Na menšie projekty mám Node.JS a na vačšie si robím vlastný CMS nad ASP.NET MVC.

fos4
Pavel Lang

Jo, ale pořád chybí try/finally blok a taky by bylo fajn rozšířit type hinting na int, float, string… (array a objekty jsou již pokryté). Prostě přinést výhody staticky typovaných jazyků do PHP, ale přitom zanechat možnost psát dynamicky, beztypově, ono se PHP v nějaké verzi možná do 10 let do toho dostane, nebo nám M$ přinese vlastní .NET dialekt ;-)

blizz

máte pravdu php5.3 už má aj closures. aj keď májú divnú syntax (nutnosť použiť keyword use a za ním vypísať zoznam premenných, ku ktorým budem pristupovať)

php 5.3 má tiež anonymné funkcie, ale lambda výraz je skrátená verzia anonymnej funkcie, a tie PHP nemá.

ud

když nevíš, jaké configy, tak to je zlé“

František Kučera

To víš, jmenné prostory jsou prý moc enterprise a kanón na vrabce :-D

imploder

To samé je u Qt, tak začínají všechny třídy na Q. Neviděl bych to jako zásadní problém (tj. důvod proč framework nepoužívat), i když namespacy jsou takové systémovější řešení. Je to open-source, takže jde si v případě nutnosti třídy přejmenovat.

plistiak

Vďaka za tento článok. Je na vysokej odbornej úrovni a rád som si rozšíril obzory. Keďže však autor je tiež len normálny „ajťák“, bolo by fajn dať článok prečítať aj (slovenskej) jazykovej korektorke. Český čitatelia si asi chyby nevšimnú ale Slovákom (zvlášť z východu) by korektúra mohla pomôcť k lepšiemu „prožitku“.

LV

*priežitku. Podle vzoru riezok.

Martin Malý

Riezok? To nie je „rezeň“? Su zmatené! ;)

Martin Malý

Korektora máme, ale ne na slovenštinu :( Pokusíme se s tím něco udělat, abychom byli připraveni

Michal

Nevim jak dulezita je gramatika z Vaseho uhlu pohledu, ale neni to jenom obrana proti prudicum? Myslim si ze rozumny lidi si z toho clanku vezmou to co v nem je a k tomu par gramatickych chyb rozhodne neprekazi.
Lidem, ktery maji ruzne osob(nost)ni problemy z toho mozna vstavaji vlasy na hlave, ale stoji Vam za to se na takove ohlizet a vynakladat prostredky na zmirneni jejich lince?

Piece :-)

plistiak

Nie som purista a drobné chyby mi nevadia. Cením si, že Igor napísal tento článok a nechcel som nikoho kritizovať. Myslím, že štylisticky a pravopisne správne texty poukazujú na profesionalitu periodika. Predpokladám, že keby české texty neprechádzali jazykovou korektúrou, tak ja by som si to nevšimol, ale vám by sa čítalo oveľa ťažšie.

Pravopis, samozrejme, nie je niečo, čo by mi prekážalo natoľko, aby som prestal čítať texty na tomto webe. Len v tomto článku bolo niekoľko výrazov, pri ktorých som sa pozastavil, pretože sú to buď poslovenčené české slová, alebo slang zo západneho Slovenska. Vidím, že p. Malý a p. Krčmář sa snažia zvyšovať kvalitu a napadlo mi, že toto by mohlo tiež trocha pomôcť.

PS: zo Slovenského jazyka som na maturite dostal 4 ;)

plistiak

Jasné, veď ty si predsa neštudoval slovenčinu na profi úrovni. Tiež robím chyby a niekedy si nie som istý. Preto som písal, že po odbornej stránke som veľmi spokojný a teším sa tomuto článku. Skôr som to myslel ako návrh pre IInfo. Z času na čas vydajú aj články v slovenčine, tak by sa to mohlo hodiť.

marek

ešte raz ďakujem za článok, ešte ma napadlo, nechcel by si z toho urobiť aj seriál? Napr. nejaký tutoriál ako urobiť nejakú aplikáciu. Myslím, že mnohí by to ocenili, sa mi zdá, keď si čítam túto diskusiu…

Pepa

Proboha nestraš. Je rok 2011. Pokud se chce Zdroják tvářit jako moderní portál pro webaře, tak by neměl psát seriály o frameworcích v php a už vůbec ne o obskurních frameworcích v php (jeden článek bohatě stačí).

Spíš se zaměřit na modernější věci typu Django/Python (nějakej seriál tu byl), Ruby/Sinatra/Rails (jeden článek nedávno), Capuccino (seriál tu byl, ale moc asi nezaujal), Sproutcore (nic?), Backbone (nic?), Spine (nic?) Zepto (nic?), jQuery mobile (nic?), Sencha (nic?), Play (nic?), Mongo (něco tu bylo), Redis(?), Riak, Neo4j… Prostě při vší úctě, moderní webařina je převážně úplně jinde než v php+mysql.

Na druhou stranu chápu specifičnost zatuchlého českého rybníčku, kde prostě lidi články o ničem jiným než php moc nezajímají (viz. například téměř nulová diskuse u článků o Cappucino), a ty který to zajímá, si to dávno přečetli jinde (viz. překlady půl roku starých profláknutých článků a návodů).

Martin Malý

Backbone nahozeno zde: http://zdrojak.root.cz/clanky/javascriptareni-nejen-jquery-ziv-je-javascriptar/, jQmob je v plánu, na Senchu ani Mongo nemám autory, Redis zde: http://zdrojak.root.cz/clanky/redis-key-value-databaze-v-pameti-i-na-disku/, Zepto ve zprávičkách… Jenže druhá věc je, že články o těhle technologiích mají naprosto mizivou odezvu, a když nějakou mají, tak spíš zápornou („to jsou nějaké kraviny, co za rok nikoho nebudou zajímat, napište radši něco o klasických SQL databázích nebo o Javě“).

Překlady „půl roku starých profláklých návodů, co už všichni četli“ mají, věřte nebo ne, docela osvětový efekt: dostanou se i k těm, které by tyhle informace ani nenapadlo hledat. Poměrně častá je reakce „Tyjo, tohle jsem potřeboval a netušil jsem, že to už existuje…“

Pokud je na druhou stranu PHP nejpoužívanější jazyk pro tvorbu webů (celosvětově, ne jen „v českém rybníčku“), nemůže se mu Zdroják nafrněně „ze zásady“ nevěnovat.

Pepa

No to je právě to co jsem říkal. Že je problém čtenářů Zdrojáku že je ty nový technologie nezajímají, nekoukají dál za špičku svýho nosu, atd. Neříkám, že mají od zítřka všichni flákat do aplikací Redis a psát v Pythonu, ale je dobrý si to aspoň osahat a vědět jaký jsou možnosti (a třeba si z toho něco vzít i do php, viz. právě ten Yii). Přístup „kraviny, co za rok nikoho nebudou zajímat“ je bohapustá zabedněnost.

PHP je sice stále nejpoužívanější, ale přece jen asi spíš z historických důvodů. Když se podívám třeba na http://thechangelog.com/ kterej se těm moderním webařským technologiím věnuje, tak tam zcela dominuje javascript, ruby, python,… a článek o php tam byl naposled… asi nikdy.

Takže moje poznámka by se dala shrnout jako „seriál o Yii by byl jen dalším zakonzervováním v neblahém stavu“.

Martin Malý

Já nesouhlasím s tím shrnutím. Z mého pohledu je článek o Yii právě ukázkou modernějšího směru vývoje, frameworku, který je v PHP „nová generace“. A jako takový si zde místo zaslouží. Ale to je na delší diskusi…

Pepa

No jo, jenže on je „nová generace“ právě jen ve světě php. Jinak přináší věci, který jsou v ruby nebo pythonu běžný několik let.

Článek sem nepochybně patří, i já si rád přečtu něco málo o php, přesto že v něm nedělám, a i z php světa můžou přijít zajímavý nápady. Ale na seriál to asi není. To složení článků už takhle totiž moc neodpovídá tomu, co se ve světě web developmentu děje.

Třeba nejžhavější témata jsou v současnosti právě 1) javascript – backbone je megahit, sproutcore má novou významnou verzi a novou dokumentaci, node.js prochází bouřlivým vývojem a 2) html na mobilech a tabletech – html5, jquery mobile, media-queries, javascript microframewor­ks/microlibra­ries, apod. Téma NoSQL je skoro passé :-) a ten největší hype už opadl.

Michal

Ono je to hezky ty moderni frameworky v ruby a pythonu, jenze vysvetli tady v CR nejaky firme ze (pro ne) standardni procesy pro stagovani (manualni FTP kopirovani v total commanderu) se uz dneska pouzivaji jen tady a v Ukrajine.
Vysvetli jim, ze v PHP pises zbytecny znaky a slova ktery te nekde jinde neobtezujou a pises tam tudiz rychlejs. A dalsi a dalsi….
Jednou jsem se snazil ve firme prosadit ror a dopadlo to tak ze uz jsme o tom vickrat nemluvili, protoze jsem nemohl argumentovat proti konzervativnim duvodum.
1) musime byt stejni jako ostatni, kdyz budeme mit jine nastroje nez ostatni, nemuzeme migrovat projekty se spratelenyma firmama
2) museli bysme mit dalsi zvlastni hosting, chceme jen jeden a ten menit nemuzeme
3) spousta firem meni programatory jak na bezicim pase a kdyby se zacalo programovat v necem jinem nez je PHP, nebylo by takovy portfoli.
atd. atd…

Takze ve vysledku bych byl jak trosecnik na ostruvku a programoval si neco, na co by byl problem sehnat zastupitelnost a z pohledu managementu by s tim bylo spousta problemu.

Byly casy kdy jsem si rikal ze PHP definitivne odzvonilo, ale ted uz vim, ze tady s nama bude dokud budou stat banky a bude porad nejpouzivanejsi.

Opravdový odborník :-)

Sice PHP nemám rád a už bych se k němu nechtěl vracet, ale ty argumenty nejsou tak mimo, jak si myslíš. Ad 2) výběr hostingu opravdu hraje roli. Ad 3) sehnat dobré a levné lidi taky, když máš skvělou technologii, ale nemá na tom kdo vyšívat, je to na nic. Ad 1) akorát tohle je blbost — je potřeba se odlišit od konkurence, ale zase záleží, na jaké zákazníky se firma zaměřuje — jestli chce sekat webiki jako Baťa cvičky, nebo cílit na nějakou užší skupinu a odbornější služby — a tohle je více strategické než technické rozhodnutí.

Pepa

Tak jim to nevysvětluj a běž o dům dál. Z pohledu zaměstnance jde přece taky o „programming happines“. A za současnýho stavu máš výhodu, že railsový firmy berou i zkušený phpčkaře, kteří chtějí switchnout.

Z pohledu firmy je zatím problém vyšší cena a nižší dostupnost developerů, ale dá se to částečně řešit zase nabíráním phpčkarů a jejich přeškolováním. A pak tě jako zaměstnavatele zajímají věci jako rychlost vývoje, to že se jede TDD a verzuje na Gitu, takže můžeš mít klidný spaní, když se dopisujou a přepisujou velký kusy aplikace, to že snad na všechno existuje gem a není potřeba to psát in-house, atd. atd. Nehledě na to, že když jedeš TDD na Gitu a píšeš všechno anglicky, tak není problém aby ti kus appky napsal polák, ukrajinec nebo ind. Neříkám, že tohle nejde i na php, jen prostě ty best practices obvykle začínají v rails světě a až postupně se dostávají dál.

Michal

Ja jedu TDD i BDD a na gitu i v PHP to jen tak naokraj.slovic­karis.

Ale jinak peknej prispevek, zamyslim se nad tim :-)

David Grudl

Skazky o úžasných frameworcích na Ruby a Pythonu, které už dnes umí věci, o kterých se hlupáčkům s PHP ani nesní :-)) Blud ze stejné kategorie, jako že lepší je vše, co je „zahraniční“ nebo dokonce „americké“. Ale prosím, klidně si tomu věřte.

Nářky nad PHP, které ty „objekty přece vůbec neumí, na Webtrhu kucí říkali“, ačkoliv realita je taková, že oproti Ruby umí interfaces, type hint, oproti Pythonu umí privátní a protected proměnné, atd., tedy věci, bez kterých si řada programátorů neumí život představit.

Nábožné uctívání Rails? Framework, který teprve v poslední verzi z roku 2010 objevil unobtrusive JavaScript a přestal generovat kód, kde v každém „ajaxovém“ elementu je monstrózní atribut onclick? Gratuluji!

Jazyk je jazyk. Můžeme se smát maďarštině, že zní legračně, ale vůbec to neznamená, že Maďaři jsou hloupější. Hloupý je leda ten, kdo to tvrdí.

Ondřej Mirtes

Souhlas. Rubysti tvrdí, že nepotřebují dependency injection, protože mají monkey-patching :)

Tenhle posměch ale taky pramení z neznalosti. Třeba má Ruby oproti PHP něco navíc a naopak, ale ty jednotlivé tábory si to nepřiznají.

Stejně tak všichni Apple hateři, které jsem potkal, zmlkli poté, co dostali do ruky iPad :)

anonym

Kde to nekdo vyznacny z komunity tvrdi? Zase JPP?

anonym

Ja se ptal na _vyznacneho_ predstavitele Ruby komunity a ne na nejakeho smudlu z Hornidolni. Vzdyt tento clovek nepracuje na zadnem vyznacnem Ruby projektu ci se nejak vyznacne nezapojuje do komunity.

Pepa

Co je tohle za výlev? Snaha zesměšnit vkládáním absurdních nesmyslů do cizích úst? Tenhle styl diskuse bych ponechal pánům v poslanecké sněmovně, prosím.

Hmmm

Pravdivy vylev.

blizz

python má aj privátne atribúty, akurát sa nepoužíva kľúčové slovo private ale dve potržítka pred názvom atribútu. a keď chcete k takejto premennej / metóde, pristupovať z vonka tak sa proste vyhodí chyba.

František Kučera

U toho musel někdo asi „hodně“ přemýšlet — když budu chtít změnit přístupnost metody/proměnné, tak abych přepsal celý program.

Martin Soušek

Ale Davídku neboj, my ti přece nechceme rozšlapat tvoje Nette náboženství. Klidně ať si v tom dělá celá tahle republika. Jsi nejlepší a my ti věříme!

Ale teď vážně. Jazyk je sice jen jazyk, ale asi je nějaký důvod, proč nepíšeme web aplikace v Pascalu. Musí být nějaký důvod, proč jsme kdysi z Basicu přešli na Pascal, potom na C a potom na PHP. Určitě je nějaký důvod, proč jsou VBA programátoři ostatním jen pro smích.

Když programátor při práci zjisti, že ho jeho stávající jazyk brzdí a nedovolí mu vyjádřit co si přeje, tak má dvě možnosti. Buď zvýší úsilí a nějak to spatlá, anebo jazyk změní za lepší. Ty jsi zvolil první možnost a je to tvé právo, které ti nikdo nebere.

Michal

Nette mi nesedi, ale tvymu prispevku davam velkej dislike!
Kolik jsi toho napsal ze se do nej takhle poustis? Asi toho moc nebude, protoze jinak bys tohle nikdy nenapsal.

petr dunaj

zrovna jsem o te volbe jazyka premyslel, kdyz si jakub vrana postezoval na twitteru, ze kvuli php projel google code jam a pak publikoval na blogu obskurni reseni problemu

o kolik lehceji by to slo udelat v jinem jazyku. v nekterych by dokonce k chybe ani nedoslo, protoze na presne vypocty prepnou automaticky :)

Hmmm

Staci si do vyhladavania tej stranky zadat php a hned sa tam tych clankov o PHP objavi niekolko :)

Pepa

Ano. Třeba za rok 2011 je tam celý JEDEN příspěvek o nějakém doplňku pro WordPress :-)

Hmmm

To je podstatne viac ako…asi ziaden :)

Hugo

Suhlas :“Překlady „půl roku starých profláklých návodů, co už všichni četli“ mají, věřte nebo ne, docela osvětový efekt: dostanou se i k těm, které by tyhle informace ani nenapadlo hledat. Poměrně častá je reakce „Tyjo, tohle jsem potřeboval a netušil jsem, že to už existuje…““ to som presne ja :)
Inak k tomu pokroku – nie je potrebne sa vrhat na kazdu novu technologiu, ktora sa objavi. Jedna clovek zisti, ze to nakoniec ani nepotrebuje a je zbytocne mat v hlave X frameworkov, etc …

Stefano

Yii framework som skusal zhruba pred rokom.
Určite stoji za vyskušanie. Mne sa pacilo vytvaranie a validacia formularov priamo v modely. Cache kde si clovek urci ktore casti su dynamicke a ktore staticke. Jednoducha podpora pre validaciu formularov pomocou ajaxu. Rychlost. Generovanie kodu. atď.
Momentalne pouzivam Zend Framework ktory mne vyhovuje najviac

Extak

Vzhledem k tomu, že v diskuzi se o Yii téměř nediskutuje, dovolím si zmínit svou osobní zkušenost.

Asi před dvěma lety (V té době Yii byla horká novinka) jsem se rozhodoval pro PHP nový framework (dříve CakePHP, Kohana). Nette vypadalo zajímavě, ale z mého pohledu se ještě nehodilo pro produkční nasazení, takže jsem skončil u Yii a už na něm tedy nějakou dobu vyšívám.

Zatím jsem nenarazil na nic produktivnějšího pro frontend webových aplikací. Výborná dokumentace, solidní podpora pro nejběžnější problémy a téměř neomezená ohýbatelnost.

A dovolte mi ještě také zvednou prapor za PHP. Existuje spousta a spousta zajímavějších, modernějších a krásnějších technologií, májí ovšem lepší poměr cena / výkon? To je totiž to, co obvykle zajímá ty pány v sakách co nám platí :-)

Radoslav

Mal som moznost pracovat v Yii na velkom pre-made scripte, ktory bol (podla autorov) spickovo napisany, ale to sielene zanorenie tried a abstraktnost vytvara tony suborov a pri velkych projektoch je to az sialene neprehladne. Chcete zmenit jedno pole v formulari a musite urobit 5 zmien na 5 miestach pre kompletnu validaciu s ohladom na to aby ten formular este bol vobec funkcny.

Mozno na male low cost blog apps, inak urcite nie…

drla

Dovolim si nesuhlasit. Ak si sa nevrtal v jadre Yii frameworku tak si urcite nenarazil na sialenu abstrakciu (ktora tam podla mna ani nie je). Cize vychadza mi z toho ze to preabstraktoval clovek alebo tym ludi ktory vyvijali danu aplikaciu a v tom pripade to nema nic SPOLOCNE S AKYMKOLVEK frameworkom… A to s tym formularom je podla mna blbost , pokial viem Yii ti umoznuje viacerymi sposobmi vytvorit formular…

bud v controller si vytvoris model a vo view pouzijes helpery pre dane formularove prvky, alebo pouzijes form builder, velku cast spravis v controller a vo view ho iba vykreslis ,alebo pouzijes widget.

Podla toho aky sposob pouzijes na pridanie prvku vo forme ti v podstate staci napr. vo view pridat helper a v model validaciu a skoncil si, kde si zobral 5 miest ????

lubos

Taktiez si myslim, ze je to skor emocionalny postoj, ako argumentujuci. Mam s Yii dobre skusenosti, robil som v nom niekolk palikacii. Pri porovnani so Zend Frameworkom jednoznacne vyhrava Yii. Dovodov je mnoho a su akozeinac subjektivne, takze ich radsej neuvadzam, ale vsetky aplikacie robim uz len v Yii.

moo

nejak mi nedochazi jak resit ze v yii vygenerovat model a subclassnout ho, aby se mi pre pregenerovani neprepsaly vsechny zmeny, uz je trochu problematicky, a predpokladam ze kdyz z toho budu chtit vytvorit crud stranky (a taky je parkrat pregenerovat), tak mam na velmi nesikovny pouziti frameworku zadelano?
Tak sem skoncil u symfony…ale yii se mi libi, muze mi nekdo rict jestli delam nekde v uvazovani chybu? Krome toho ze pocitam ze model budu parkrat upravovat..tomu se nehodlam vyhybat.

WESTRAY, xiscris

Extak

U nás ve firmě to řešíme tak, že se snažíme mít kvalitní analýzu a návrh, podle kterého vygenerujeme kostru aplikace a v případě změn je už doděláme ručně. Problém je totiž nejenom s modely (ty by se dali vyřešit děděním asi docela dobře), ale s kontroléry a především views, kde obvykle přibývají např. všelijaké JS udělátka.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.