Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Lekce 3 - První aplikace v Symfony

PHP Symfony Základy První aplikace v Symfony

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u další lekce online kurzu o tvorbě webových aplikací v PHP frameworku Symfony. V tomto tutoriálu bych chtěl prakticky navázat na lekci předchozí, Instalace Symfony a IDE. Ukážeme si tvorbu první jednoduché aplikace a začneme s implementací jejího modelu. Můžete tedy klidně pokračovat v projektu z minula nebo si vytvořit nový, samozřejmě se všemi náležitostmi.

Volba aplikace

Výběr vhodné aplikace, na které bychom si mohli demonstrovat vše potřebné, nebyl úplně snadný. Nakonec se vítězem stala jednoduchá kalkulačka, jejíž screenshot vidíte níže. Takže když již víme v čem a co budeme dělat, tak hurá do práce! :)

Kalkulačka v PHP frameworku Symfony

Postupy implementace MVC

Nyní, když již máme vše připravené, můžeme začít programovat samotnou kalkulačku. Vyvstává důležitá otázka a to, odkud začít? Za sebe mohu doporučit 3 způsoby postupu:

  • Postup od Pohledu - V tomto postupu se nejdříve zamyslíme, co chceme vlastně na dané webové stránce zobrazit. Podle toho si navrhneme šablonu (view). Abychom ji mohli vyplnit potřebnými daty, navrhneme následně kontroler, který potřebná data předává do šablony. Ten ale musí tato data získat z modelu, takže nakonec naprogramuje onen model, který tato potřebná data dodává např. z databáze.
  • Postup od Modelu - Zde je postup v podstatě opačný. Nejdříve se opět zamyslíme jaká data budeme potřebovat zobrazit. K získání těchto dat si vytvoříme model. Dále potřebujeme tato data zpracovat a předat do šablony a k tomu si opět uděláme potřebný kontroler. Nakonec navrhneme šablonu, kde se získaná data zobrazí do podoby webové stránky.
  • - Kombinace předchozích - Tento postup si bere z každého trochu. Vytváříme postupně šablony i modely a pak se je snažíme pomocí kontrolerů lepit dohromady. Toto je asi nejpoužívanější metoda, která nabízí tu výhodu, že můžeme střídavě postupovat z obou směrů vývoje, což je v praxi asi nejpoužitelnější. Jen musí člověk dát pozor, aby se v tom neztratil, zachoval rozdělení funkčnosti modelů a kontrolerů a nelepil dohromady ošklivé konstrukce, které mu zkrátka vyplynuly střetem modelu a šablony.

Já v tomto případě zvolím postup číslo dvě, protože se domnívám, že se pro naši kalkulačku více hodí. Takže začneme hezky od Modelu.

Model

src/Model/Cal­culator.php

Řekněme, že naše kalkulačka bude mít 4 základní operace, tj. sčítání, odčítání, násobení a dělení. Tyto operace umístíme do modelu, protože nám vracejí výsledky, tj. naše data. Vytvoříme si tedy složku src/Model/, kam umístíme soubor Calculator.php s naší třídou modelu Calculator, která definuje naše 4 operace a vypadá následovně:

<?php

namespace App\Model;

/**
 * Model operací kalkulačky.
 * @package App\Model
 */
class Calculator
{
        /**
         * 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(int $x, int $y): int
        {
                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(int $x, int $y): int
        {
                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(int $x, int $y): int
        {
                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(int $x, int $y): int
        {
                return round($x / $y);
        }
}

Můžete si povšimnout, že jelikož jsem se rozhodl provádět operace v celých číslech, tak chci tuto vlastnost zachovat i u dělení, tudíž výsledek zaokrouhluji na celá čísla. Dále si bystřejší z vás určitě všimli, že není ošetřeno dělení nulou. To však není chyba a my se k tomu ještě vrátíme.

Z dnešní lekce už je to ale vše, takže na kontroler, šablony a další prvky se podíváme v lekci příští, Dokončení kalkulačky v Symfony :)


 

 

Článek pro vás napsal Jindřich Máca
Avatar
Jak se ti líbí článek?
2 hlasů
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. :-)
Miniatura
Předchozí článek
Instalace Symfony a IDE
Miniatura
Všechny články v sekci
Základy frameworku Symfony pro PHP
Miniatura
Následující článek
Dokončení kalkulačky v Symfony
Aktivity (8)

 

 

Komentáře

Avatar
Matúš Petrofčík:16.3.2017 21:41

Jindro, máš tam preklep po inštalácii cez composer, máš tam "nette" namiesto "symfony" :) Už sa teším na ďalšie diely!

Odpovědět 16.3.2017 21:41
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Matúš Petrofčík
Jindřich Máca:16.3.2017 22:43

Díky, už jsem odeslal opravu. ;)

 
Odpovědět 16.3.2017 22:43
Avatar
Adam Matis
Člen
Avatar
Adam Matis:24. července 10:20

K čemu slouží to :int u metod ? Např public function add(int $x, int $y): int Pokud vím, tak php je dynamicky typovaný jazyk.

 
Odpovědět 24. července 10:20
Avatar
Odpovídá na Adam Matis
Erik Šťastný:24. července 10:32

Když někomu ta dynamičnost nevyhovuje, tak to může právě takto omezit. Stejný způsob umožnuje i Python, který je taky dynamicky typovaný.

Editováno 24. července 10:32
 
Odpovědět  +1 24. července 10:32
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.