Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

3. diel - Prvé aplikácie v Nette

Z minulej lekcie, Nette sandbox a IDE , máme všetko pripravené pre vývoj v Nette frameworku. V dnešnom tutoriále si teda ukážeme tvorbu prvej jednoduché aplikácie. Na nej si vysvetlíme základnú štruktúru a konfiguráciu frameworku a predovšetkým základy MVP.

Voľba aplikácie

Výber vhodnej aplikácie, na ktoré by sme si mohli demonštrovať všetko potrebné, nebol úplne jednoduchý, ale nakoniec sa víťazom stala jednoduchá kalkulačka, ktorej screenshot vidíte nižšie. Takže keď už vieme v čom a čo budeme robiť, tak hurá do práce! :)

Kalkulačka v Nette frameworku pre PHP - Základy Nette frameworku

Inštalácia Nette

Aby sme mohli začať programovať, musíme si najskôr Nette nejakým spôsobom nainštalovať. Spôsobov je hneď niekoľko:

1) Klasický download a rozbalenie

Nette si klasicky stiahnete a rozbalíte do danej projektovej zložky z oficiálnej stránky. Môžete k tomu využiť aj nejaké to IDE, ako sme si napokon ukazovali minule. Projekt si pomenujte napr. nette-calculator.

2) Cez Composer

Pokročilejší používatelia môžu použiť Composer, čo je nástroj na správu závislostí v PHP. Najskôr si ho musíte stiahnuť a nainštalovať a ako na to, nájdete v tomto návode. Keď už máte Composer pripravený, stačí si otvoriť danú projektovú zložku a spustiť konkrétny príkaz, ktorý zariadi celú inštaláciu Nette a skontroluje aj potrebné závislosti.

Nový projekt vytvoríme príkazom:

composer create-project nette/web-project nette-calculator

Týmto príkazom sa nám vytvorila základná štruktúra projektu v zložke nette-calculator/. K nej si iba pridáme súbor .htaccess pre automatické presmerovanie do zložky www/, kde sa nachádza súbor index.php, ktorým sa celá aplikácia spúšťa. Všetko, vrátane nástroja Composer, samozrejme nájdete v priloženom archíve.

Závislosti

Ešte si dovolím malú, ale dôležitú poznámku k softvérovým závislostiam. Pre inštaláciu Nette sa predpokladá, že máte sprevádzkovaný webový server (napr. Apache) s PHP vo verzii 5.6 alebo vyššej. Ak neviete, ako na to, odporúčam prečítať si článok Inštalácia Apache, MySQL a PHP na Windows. Podrobný návod, ako overiť že váš server spĺňate všetky požiadavky nájdete v minulej lekcii.

Teraz stačí zadať do webového prehliadača URL:

http://localhost/nette-calculator/

Mali by ste vidieť túto základnú stránku Nette webového projektu (v prípade sandboxe tu budú ešte nejaké informácie naviac):

Nette Web project - Základy Nette frameworku

Ak sa vám táto stránka z nejakého dôvodu nezobrazuje, pravdepodobne je niečo zle s vašou konfiguráciou projektu, takže odporúčam znovu poctivo prejsť návod aj odkazy vyššie alebo treba skúsiť druhý spôsob inštalácie. A keď už naozaj nebudete vedieť kadiaľ kam, môžete mi vždy napísať do komentárov pod článok ;)

MVP

Teraz, keď už máme všetko pripravené, môžeme začať programovať samotnú kalkulačku. Vyvstáva dôležitá otázka a to, odkiaľ začať? Za seba môžem odporučiť 3 spôsoby konania:

1) Postup od Pohľadu

V tomto postupe sa najskôr zamyslíme, čo chceme vlastne na danej webovej stránke zobraziť. Podľa toho si navrhneme šablónu (template), ktorú ale musíme vyplniť potrebnými dátami. Takže následne navrhneme presenter, ktorý potrebné dáta odovzdáva do šablóny. Ten ale musí tieto dáta získať z modelu, takže nakoniec naprogramuje onen model, ktorý tieto dáta dodáva napr. Z databázy.

2) Postup od Modelu

Tu je postup v podstate opačný. Najskôr sa zamyslíme, aké dáta budeme potrebovať zobraziť. K získaniu týchto dát si vytvoríme model. Ďalej potrebujeme tieto dáta spracovať a odovzdať do šablóny ak tomu si opäť urobíme potrebný presenter. Nakoniec navrhneme šablónu, kde sa získané dáta zobrazia do podoby webovej stránky.

3) Kombinácia predchádzajúcich

Tento postup si berie z každého trochu. Vytvárame postupne šablóny aj modely a potom sa ich snažíme pomocou Presenter lepiť dohromady. Toto je asi najpoužívanejší metóda, ktorá ponúka tú výhodu, že môžeme striedavo postupovať z oboch smerov vývoja, čo je v praxi asi najpoužiteľnejší. Len musí človek dať pozor, aby sa v tom nestratil, zachoval rozdelenie funkčnosti modelov a Presenter a nelepil dohromady škaredé konštrukcie, ktoré mu skrátka vyplynuli stretom modelu a šablóny.

Ja v tomto prípade zvolím postup číslo dva, pretože sa domnievam, že sa pre našu kalkulačku viac hodí. Takže začneme pekne od Modelu.

Model

App / model / CalculatorMana­ger.php

Povedzme, že naša kalkulačka bude mať 4 základné operácie tj. Sčítanie, odčítanie, násobenie a delenie. Tieto operácie umiestnime do modelu, pretože nám vracajú výsledky, teda naše dáta. Vytvoríme si zložku app/model/, kam umiestnime súbor CalculatorManager.php s našou triedou modelu CalculatorManager, ktorá používa PHP trait Nette/SmartObject a definuje naše 4 operácie:

<?php

namespace App\Model;

use Nette\SmartObject;

/**
 * Model operací kalkulačky.
 * @package App\Model
 */
class CalculatorManager
{
    use SmartObject;

    /**
     * Sečte daná čísla a vrátí výsledek.
     * @param int $x první číslo
     * @param int $y druhé číslo
     * @return int výsledek po sčítání
     */
    public function add($x, $y)
    {
        return $x + $y;
    }

    /**
     * Odečte druhé číslo od prvního a vrátí výsledek.
     * @param int $x první číslo
     * @param int $y druhé číslo
     * @return int výsledek po odčítání
     */
    public function subtract($x, $y)
    {
        return $x - $y;
    }

    /**
     * Vynásobí daná čísla a vrátí výsledek.
     * @param int $x první číslo
     * @param int $y druhé číslo
     * @return int výsledek po násobení
     */
    public function multiply($x, $y)
    {
        return $x * $y;
    }

    /**
     * Vydělí první číslo druhým bezezbytku a vrátí výsledek.
     * @param int $x první číslo
     * @param int $y druhé číslo; nesmí být 0
     * @return int výsledek po dělení bezezbytku
     */
    public function divide($x, $y)
    {
        return round($x / $y);
    }
}

Môžete si všimnúť, že keďže som sa rozhodol vykonávať operácie v celých číslach, tak chcem túto vlastnosť zachovať aj u delenie, teda výsledok zaokrúhľuje na celé čísla. Ďalej si bystrejší z vás určite všimli, že nie je ošetrené delenie nulou. To však nie je chyba a my sa k tomu ešte vrátime.

Základné operácie by sme teda mali, to však ešte nie je všetko. Keďže by model mal byť rozšíriteľný a podľa MVP by sme pri zmene modelu najlepšie nemali meniť ani presenter, ani šablónu, pridáme si ešte jednoduché rozhranie, ktorá nám tieto vlastnosti zaistí. Len poznamenám, že tieto vlastnosti možno získať aj pomocou reflexie, ale tej sa tu venovať nechcem. To znamená, že pridáme ešte tieto metódy a konštanty:

// ...

/** Definice konstant pro operace. */
const
    ADD = 1,
    SUBTRACT = 2,
    MULTIPLY = 3,
    DIVIDE = 4;

/**
 * Getter pro existující operace.
 * @return array asociativní pole konstant pro operace a jejich slovního pojmenování
 */
public function getOperations()
{
    return array(
        self::ADD => 'Sčítání',
        self::SUBTRACT => 'Odčítání',
        self::MULTIPLY => 'Násobení',
        self::DIVIDE => 'Dělení'
    );
}

/**
 * Zavolá zadanou operaci a vrátí její výsledek.
 * @param int $operation zadaná operace
 * @param int $x         první číslo pro operaci
 * @param int $y         druhé číslo pro operaci
 * @return int|null výsledek operace nebo null, pokud zadaná operace neexistuje
 */
public function calculate($operation, $x, $y)
{
    switch ($operation) {
        case self::ADD:
            return $this->add($x, $y);
        case self::SUBTRACT:
            return $this->subtract($x, $y);
        case self::MULTIPLY:
            return $this->multiply($x, $y);
        case self::DIVIDE:
            return $this->divide($x, $y);
        default:
            return null;
    }
}

// ...

Teraz sme schopní pridať ďalšiu operáciu do modelu a pritom v prezentačného aj v šablóne nemusíme zmeniť v podstate nič.

A to je z modelu iz dnešnej lekcie už naozaj všetko. Na nadväzujúce presenter, routovanie, formuláre a šablóny v Nette sa pozrieme v lekcii budúci, Dokončenie kalkulačky v Nette :)


 

Predchádzajúci článok
Nette sandbox a IDE
Všetky články v sekcii
Základy Nette frameworku
Preskočiť článok
(neodporúčame)
Dokončenie kalkulačky v Nette
Článok pre vás napísal Jindřich Máca
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje převážně webovým technologiím, ale má velkou zálibu ve všem vědeckém, nejen ze světa IT. :-)
Aktivity