Nette Framework
  • Úvodní stránka
  • Download
  • Dokumentace
  • Fórum
  • Blog
  • Přispějte
  • Quick Start
    • Začínáme
    • Adresářová struktura
    • Vytvoření presenteru
    • Připojení šablony
    • Tvorba odkazů
    • Hezčí šablony
    • Zobrazení tabulky
    • Stránkování a řazení
    • Tvoříme komponentu
  • Nette\Annotations
  • Nette\Application
    • Application
    • AppForm
    • Control
    • Presenter
    • PresenterCompo­nent
    • PresenterRequest
    • Routování
    • MultiRouter
    • Route
    • SimpleRouter
  • Nette\Caching
  • Nette\Component
  • Nette\Debug
    • Základy
    • Logování chyb
    • Firebug
  • Nette\Environment
  • Nette\Forms
  • Nette\IO\SafeS­tream
  • Nette\Loaders
  • Nette\Object
  • Nette\Security
    • Bezpečnost aplikací
    • Identity
    • SimpleAuthenti­cator
    • Permission
    • Dynamická správa rolí a zdrojů
  • Nette\String
  • Nette\Templates
    • Template
    • Template Filters
    • Template Helpers
  • Nette\Web\Html
  • Nette\Web\HttpR­equest
  • Nette\Web\HttpR­esponse
  • Nette\Web\Session
  • Nette\Web\User
Naposledy změněno 18. 10. 2008 Edituj Historie Poslední změny

Nette Framework Quick Start IV.

Databázový layer

Cílem tohoto návodu je vytvořit aplikaci pro prohlížení databázových tabulek. Nette Framework však záměrně žádný databázový adaptér nenabízí – nechce totiž být se žádným napevno svázán. Je tedy na našem rozhodnutí, kterou databázovou vrstvu použijeme. A pokud si mám vybrat, rozhodně zvolím Dibi, šikovnou a rychlou knihovnu, která navíc umí spolupracovat s Laděnkou (Nette\Debug). Stáhněte si proto Dibi a rozbalte jej do adresáře DataGrid/libs/dibi.

Jako databázový server použijeme SQLite a do souboru DataGrid/app/models/sample.sdb zkopírujeme libovolnou vzorovou databázi.

Seznam tabulek

Nyní upravíme presenter Default tak, aby nám zobrazil seznam všech tabulek v databázi. Dobrým nápadem je nejprve upravit šablonu do zamýšlené podoby.

Soubor DataGrid/app/templates/Default.default.phtml:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>DataGrid – Nette Framework example</title>
    <link rel="stylesheet" media="all" href="<?php echo $baseUri ?>css/screen.css" type="text/css">
</head>

<body>
    <h1>DataGrid - Nette Framework example</h1>

    <h2>Tables:</h2>
    <ul>
        <?php foreach ($tables as $table): ?>
        <li><?php echo htmlSpecialChars($table) ?></li>
        <?php endforeach ?>
    </ul>
</body>
</html>

Jak vidíte, v šabloně se používají proměnné $baseUri a $tables, které je potřeba nějakým způsobem naplnit.

V případě proměnné $baseUri, která určuje základní URI dokumentu, mám pro vás dobrou zprávu: Nette Framework ji nastaví sám! S tím souvisí druhá dobrá zpráva. Nikde v návodu se po vás nechtělo, abyste nastavili váš webový server tak, aby projekt běžel kupříkladu na adrese http://localhost/. Všimli jste si? Nastavte si totiž server dle libosti a Nette Framework se už postará, aby vám aplikace fungovala. Kdekoliv.

Proměnnou $tables nastavíme šabloně snadno. Uvnitř presenteru stačí pouze zadat:

$this->template->tables = ...;

Nicméně chceme jako hodnotu nastavit skutečný seznam tabulek v databázi. Ke slovu tak přichází Dibi.

Soubor DataGrid/app/presenters/DefaultPresenter.php:

class DefaultPresenter extends /*Nette\Application\*/Presenter
{
    /** @var DibiConnection */
    protected $db;

    protected function startup()
    {
        // připojíme se k souboru s databází
        require_once LIBS_DIR . '/dibi/dibi.php';
        $this->db = new DibiConnection(array(
            'driver' => 'sqlite',
            'database' => APP_DIR . '/models/sample.sdb',
        ));
    }

    public function renderDefault()
    {
        // naplníme proměnnou `$tables` šablony
        $this->template->tables = $this->db->getDatabaseInfo()->getTableNames();
    }
}

V prohlížeči pak uvidíte tento výsledek:

V presenteru se objevily dvě nové metody. První z nich startup(), ve které dochází k připojení k databázi, a která se, jak asi název napovídá, zavolá ihned po spuštění presenteru. A to pro jakékoliv view. Metoda renderDefault(), kde naplníme parametr šablony, se zavolá při vykreslování pohledu default.

Protože lze předpokládat, že i ostatní pohledy budou využívat služeb databáze, je toto rozdělení vhodné.

A nyní si ukážeme jednu z nejsilnějších zbraní Nette Frameworku!

« Vytvoření presenteru Tvorba odkazů »

Nette Framework powered | dibi powered | Texy! powered | Institut Školení PHP