Pokusíme se vytvořit primitivní webovou aplikaci pracující s databází. Uvidíte, jak je to s Cakem jednoduché.
Na úvod se řekněme něco o takzvaném routingu. Cake, jako každý jiné framework, nám nejen že url rozparsuje, ale také nám je pomůže sestavit. Sestavení i parsování na sobě vzájemně souvisí, a této oblasti se říká routing. Základní parsování url v Caku vypadá následně:
/controller/action/arg1/arg2/.../argn
Url je rozděleno podle lomítek, první fragment je považován za jméno controlleru, druhý za jeho metodu, a zbytek za argumenty metody. Metodě se někdy také říká action.
Návrh aplikace
Zásadní je návrh aplikace. Každý model reprezentuje jednu tabulku. Je běžné, že každý model má i svůj vlastní controller, který sprostředkovává ony požadavky a operace nad modelem.
Controller třída, která sdružuje skupinu souvisejících akcí (operací) nad jednou tabulkou.
Pomocí Caku můžete routing velmi efektivně "ohnout". Otom ale až někdy příště.
Konfigurace
Než začneme vyvíjet aplikaci, je třeba zprovoznit připojení k databízi.
Editujte soubor /app/config/database.php.default
a uložte jej jako database.php
.
<?php class DATABASE_CONFIG { var $default = array( 'driver' => 'mysql', 'host' => 'localhost', 'login' => 'root', 'password' => '', 'database' => 'test', 'prefix' => '' ); } ?>
Cake se automaticky připojení pomocí nastavení v proměnné $default
.
Můžete definovat i více připojení, nebo automaticky nastavit správné připojení pro produkční
prostředí. Ale o tom opět až příště. Nyní vyplňte vlastní nastavení. Driver závisí na vaší databázi.
Většinou postačí nechat mysql
.
Jestliže se vše povedlo, po zadání url vaší aplikace do prohlížeče uvidíte stránku podobnou téhle:
Praktická ukázka
Pro dnešní ukázku budeme potřebovat nějakou tabulku. Vytvořte si ji s takovouto strukturou:
CREATE TABLE `pages` ( `id` tinyint(10) unsigned NOT NULL AUTO_INCREMENT, `url` varchar(100) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `title` varchar(100) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL, `content` longtext CHARACTER SET utf8 COLLATE utf8_czech_ci, `modified` int(11) unsigned NOT NULL DEFAULT '0', `heavy` smallint(3) NOT NULL DEFAULT '0', PRIMARY KEY (`id`,`url`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stránky';
Scaffolding - lešení
V rané fázi aplikace probíhají ještě časté změny ve struktuře tabulky, respektive databáze. A proto nám Cake nabízí pomocnou ruku. Abychom nemuseli stále přepisovat aplikaci kvůli změnám v databázi, máme k dispozici takzvané lešení. To aktivujeme v controlleru. Ten ale musíme nejprve vytvořit.
Soubor/app/controllers/pages_controller.php
:
<?php class PagesController extends AppController { /* jméno třídy: množné číslo názvu tabulky + 'Controller' záleží na velikosti písmen */ // aktivujeme lešení public $scaffold; } ?>
Dále je třeba vytvoři model /app/models/page.php
:
<?php class Page extends AppModel { /* jméno třídy: jednotné číslo názvu tabulky tabulka musí být v množném čísle!!! záleží na velikosti písmen */ } ?>
Díky členské proměnné $scaffold;
controlleru Cake za
nás automaticky vygeneruje stránky formuláře pro editaci, přidání, mazání a zobrazení.
Nyní je třeba přejít na URL adresu /pages
(např http://localhost/app/pages
),
protože ještě neumíme nastavit routing, a Cake neví, jaký controller by jsme chtěli zobrazit,
když mu bude první fragment chybět.
Nebojte se výpisu SQL dole, to uvidíme jen při ladění. Pořádně si vše vyzkoušejte, těším se u dalšího dílu..