Play framework: Porovnání verzí

Smazaný obsah Přidaný obsah
m Kategorie:Software pod licencí Apache; {{Infobox - software}}
m <source> -> <syntaxhighlight> (phab:T237267)
Řádek 20:
Pro generování základní struktury projektu je možné z konzole spustit příkaz <code>activator new</code> za kterým se uvede název vytvářené aplikace. Následně je možné zvolit jazyk, ve kterém bude aplikace vytvářena. Vybrat je možné mezi Javou a Scalou. V aktuální složce je poté vytvořen adresář se zadaným názvem a základní strukturou aplikace.
 
<sourcesyntaxhighlight lang="text">
├──app
│ ├──assets
Řádek 43:
├──target
└──test
</syntaxhighlight>
</source>
 
== Nastavení aplikace ==
Základním konfiguračním souborem aplikace je soubor <code>application.conf.</code> Jedná se o běžný textový soubor, používající formát <code>[[HOCON]]</code> a jeho úpravou je možné měnit nastavení databázového připojení, konfiguraci nástroje Ebean, logování, nebo vlastnosti lokalizace. Základní konfiguraci databáze a ORM nástroje lze provést odkomentováním několika řádků.
<sourcesyntaxhighlight lang="text">
#Database conf
db.default.driver=org.h2.driver
Řádek 57:
ebean.default="models"
 
</syntaxhighlight>
</source>
Za sestavení celé aplikace je odpovědný nástroj zvaný Scala Build Tool (sbt). Ten se stará o veškeré závislosti, jejich stažení, integraci a sestavení výsledné aplikace.
 
<sourcesyntaxhighlight lang="java">
import play.PlayJava
 
Řádek 78:
"org.mindrot" % "jbcrypt" % "0.3m"
)
</syntaxhighlight>
</source>
 
== Základní příkazy konzole ==
Řádek 89:
 
Uvnitř modelových objektů je možné použít [[JPA]] anotace. ORM nástroj Ebean, který je součástí frameworku registruje mapované objekty s pomocí anotace <code>@Entity</code>. Aby mohly jednotlivé objekty využívat vlastností nástroje Ebean, měly by dědit ze třídy <code>play.db.ebean.Model</code>.
<sourcesyntaxhighlight lang="java">
@Entity
public class Delivery extends Model{
Řádek 114:
 
}
</syntaxhighlight>
</source>
 
== Tvorba řadičů a mapování HTTP požadavků ==
Řádek 121:
Ve frameworku Play jsou to pak objekty dědící od třídy <code>play.mvc.Controller</code>. Každý takový objekt řadiče obsahuje několik statických metod, jejichž úkolem je zpracovat příchozí HTTP požadavek a vrátit instanci třídy <code>play.mvc.Result</code>. Mapování jednotlivých HTTP požadavků je prováděno uvnitř souboru <code>conf/routes</code>. Uvnitř každé definice je HTTP požadavek na konkrétní adresu přiřazen ke konkrétní metodě konkrétního řadiče.
 
<sourcesyntaxhighlight lang="text">
#Home page
GET / controllers.ApplicationController.index()
Řádek 128:
GET /product/all controllers.ProductController.showAll()
POST /product/new controllers.ProductController.createNewProduct()
</sourcesyntaxhighlight>Jednotlivé definice mohou kromě statických částí obsahovat i další parametry. Protože je Scala silně typový jazyk, je nutné u každého parametru uvést i jeho datový typ.
 
=== Reverse routing ===
Řádek 148:
Práce s formulářem obvykle vyžaduje dva základní kroky. Prvním je formulář uživateli zobrazit, druhým potom zajistit jeho odeslání zpět do aplikace, včetně ověření jeho obsahu. Formuláře jsou ve frameworku Play objekty typu <code>play.data.Form</code>. Základem pro každý formulář je vždy některá třída z modelu, jehož data se mají s pomocí formuláře získat. K vytvoření formulářového objektu stačí v odpovídajícím řadiči implementovat metodu, která objekt formuláře pošle společně s dalšími požadovanými daty do dané šablony.
 
<sourcesyntaxhighlight lang="java">
public static Result showLoginFormPage(){
return ok(views.html.login.render(form(Customer.class), "Login"));
}
</sourcesyntaxhighlight>Po zavolání metody render je dané šabloně předán objekt formuláře. Každou šablonu lze chápat jako objekt (funkci) - lze jí předávat parametry a volat její metody.
 
<sourcesyntaxhighlight lang="text">
@helper._
@(loginForm : Form[models.Customer], title : String)
Řádek 174:
</div>
}
</sourcesyntaxhighlight>Výše uvedený výpis je příkladem jednoduchého přihlašovacího formuláře. Znakem, který odděluje dynamické výpisy od statických je <code>@</code>. Příkaz <code>@helper._</code> importuje vše z balíku helper. Po tomto příkazu následuje seznam parametrů, které daná funkce přijímá. Jedná se o objekt formuláře a nadpis stránky, který je použit v šabloně <code>main</code>. Do ní je vložen také objekt formuláře.
 
Hlavička formuláře obsahuje metodu, která se má zavolat po jeho odeslání. Po překladu odpovídá HTML kódu <code><form action="/login" method="POST" id="loginForm"></code>Adresa URL, na kterou se mají data z formuláře posílat je určena podle směrovacího souboru, který by v následujícím případě měl mít následující podobu.
 
<sourcesyntaxhighlight lang="text">
#Login
GET /login controllers.Login.login()
POST /login controllers.Login.authenticate()
</syntaxhighlight>
</source>
 
Pro vytvoření formuláře je možné použít jednak klasické HTML elementy, jako je tomu v předchozím příkladu nebo využít formulářové konstruktory, které jsou součástí Play. Stejného výsledku jako v předchozím příkladu lze dosáhnout i touto cestou.
 
<sourcesyntaxhighlight lang="text">
@helper._
@(loginForm : Form[models.Customer], title : String)
Řádek 198:
}
}
</sourcesyntaxhighlight>Posledním krokem práce s formulářovými daty je jejich validace. Správnost dat lze ověřit buď na straně klienta nebo na straně serveru. Obecně platí, že by se tyto dva způsoby měly kombinovat. Ověření na straně serveru lze v Play provést například následujícím způsobem v metodě controlleru.
 
<sourcesyntaxhighlight lang="java">
public static Result authenticate(){
Form<Customer> bindForm = Form.form(Customer.class).bindFromRequest();
Řádek 216:
return redirect(routes.Application.customerDetail());
}
</sourcesyntaxhighlight>První řádek metody vytvoří odkaz na objekt formuláře získaného z příchozího HTTP požadavku. K tomu slouží metoda <code>bindFromRequest()</code>. Následuje první ověření. Na každý objekt typu <code>play.data.Form</code> je možné zavolat metodu <code>hasErrors()</code>, která vrací hodnotu <code>true</code> v případě, že daný formulář obsahuje chyby. Může se například jednat o situaci, kdy uživatel nevyplnil povinné pole formuláře.
 
V případě, že jsou data formuláře neúplná, lze na toto uživatele upozornit s použitím souborů <code>cookies</code>. Metoda <code>flash<span class="br0">(</span><span class="st0">"error"</span>, <span class="st0">"Vyplňte prosím, všechna pole formuláře."</span><span class="br0">)</span><span class="sy0">;</span></code><span class="sy0">stanovuje dobu platnosti chybové hlášky na dva HTTP požadavky. Poté je uživatel přesměrován zpět na stránku s formulářem.</span>