Wiki

Clone wiki

shake/shake / quickstart

* Díl 1: Instalace, DB, Struktura aplikaceDíl 2: Scaffolding & ŠablonyDíl 3: ORMDíl 4: Service *


Shake \ Quickstart \ Instalace, DB, Struktura aplikace

Shake staví aplikace na několika-vrstvé architektuře.

Shake-Idea.png

Konkrétní příklad: Dejme tomu, že máme blog, a chceme naprogramovat zobrazení článku. Zároveň chceme, aby se každé zobrazení článku ukládalo do logů:

1) V šabloně (template) necháme vykreslit detail článku.

#!html
<h1>{$article->title}</h1>

Tagy: 
{foreach $article->tags as $tag}
    {$tag->name}{sep}, {/sep}
{/foreach}

{!$article->content_html}
2) Proměnná $article je do šablony předána v presenteru
#!php
public function renderDetail($id) 
{
    $this->template->article = $this->articleService->get($id);
}
3) V service pomocí repository získáme z databáze článek a akci zalogujeme
#!php
public function get($id) 
{
    $article = $this->articleRepository->get($id);

    $this->logRepository->create("User " . $this->user->id . " visited article $id on " . date('j.n.Y G:i:s'));

    return $article;
}
4) Metoda get() je ve všech repository k dispozici automaticky díky Shake frameworku.

5) Zároveň tato metoda vrací instanci třídy ArticleEntity (pokud taková třída existuje), která může vypadat třeba takto:

#!php
class ObjectEntity extends Shake\Database\Orm\Entity
{

    public function getTags()
    {
        $tags = array();
        foreach ($this->related('article_2_tag') as $articleTag) {
            $tags[] = $articleTag->tag;
        }

        return $tags;
    }

}
...všimněte si metody getTags(), díky které můžeme v šabloně použít {foreach $article->tags as $tag}.

Updated