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!
