Náš poslední díl (pravda, už je tomu půl roku, co byl vydán) skončil u vypisování seznamu a jednotlivých záznamů z DB. K pochopení další látky je nutné si trošku více povědět o principech fungování Caku. Povíme si pořádně o hleperech a modelech.
Cake vám nabídne pomocnou ruku tam, kde se dá, a to samozřejmě i při vytváření formulářů. Pomocí helperů jednoduše vypíšete formulářové prvky a také je následně jednoduše uložíte.
Helpery
Jak již bylo řešeno, helpery jsou tu proto, aby nám usnadnily práci. V kontextu Caku mluvíme o pomocných třídách, které nám pomáhají generovat xHTML kód. Helpery jednoduše aktivujeme jejich deklarací v proměnné $helpers:
class ExampleController extends AppController
{
public $helpers = array('Form', 'Html', 'Javascript');
public function index()
{
}
}
Tímto nastavením jsme nahráli do view 3 helepry, a to Form, Html a Javascript. Prakticky to znamená, že nyní ve view jsou dostupné nové tři proměnné, stejně pojmenované. Přesněji, máme v oněch proměnných vytvořené objekty jednotlivých helperů:
$form->foo();
$html->foo();
$javascript->foo();
Nyní již můžeme normálně pracovat s objekty, volat jejich metody apod.
Ve výchozím nastavení se automaticky nahrává helper Html. Pokud budete potřebovat další helpery, tedy definovat znovu proměnnou $helpers, nezapomeňte, že seznam načítaných helperů přepisujete – ne přidáváte.
Jestliže nechcete nahrávat helpery žádné, uveďte prázdné pole.
Helper HTML
Do verze 1.2 se tato třída starala také o vytváření formulářů. Velmi dobrým krokem bylo oddělení této problematiky do samostatné třídy. Nyní v HtmlHelperu zbyly už jen metody pro základní html elementy.
Příklady použití:
<?php echo $html->docType('xhtml-strict') ?>
<html>
<head>
<?php echo $html->charset('utf-8') ?>
</head>
<!-- .... -->
</html>
Myslím, že situace, kdy tyto pomocníky využijete, jsou již jasné. Vřele doporučuji dále studovat pomocí API, u HtmlHelepru konkrétně na adrese http://api.cakephp.org/1.2.
Helper Form
Snad nejpoužívanějším helperem je třída FormHelper. Díky ní je vytváření formulářů mnohem snazší. Výhodou těchto Helperů je samozřejmě to, že vás nikdo nenutí je používat. Výhody (i nevýhody) si ale nakonec jistě zjistíte sami a budete používat jen to, co se hodí.
<?php
echo $form->text('User.first_name');
//<input name="data[User][first_name]" value="" type="text" />
?>
Zde jsme využili metody text, která nám vygeneruje základní input. Rovnou si všimněme předaného parametru. Cake pracuje u všech sloupců také se jménem tabulky. 'User.first_name
' tedy znamená, že máme na mysli sloupce first_name z tabulky users, ke které je vázána modelová třída User.
Nyní ale přichází Cake s mnohem zajímavější nabídkou, s automatickým rozpoznáním typu vstupního pole podle typu databázového sloupce. Samozřejmě, někdy si prostě chcete typ vstupního pole určit sami, ale pro zbytek případů je tu metoda input()
.
<?php
// predpoklad: sloupec first_name je typu VARCHAR(254)
echo $form->input('User.first_name')
//<input name="data[User][first_name]" value="" type="text" />
?>
Výhoda tohoto přístupu je taková, že pokud se např. rozhodnete umožnit zadávat uživateli delší text, a změníte typ sloupce na TEXT
, automaticky za vás Cake vygeneruje prvek textarea.
Opět doporučuji případné studium API manuálu pro třídu FormHelper. Problematice vytváření formulářů se budeme podrobně věnovat v příštím díle, takže pokud jste pochopili, ale chcete více, počkejte si na příští díl.
Formát dat vrácených FormHelperem
Helpery za nás generují html tagy, ale, jak jste si mohli všimnout v dnešních ukázkách, také vytvářejí speciální název vstupních tagů: data[User][first_name]
. Cake tedy od PHP získá výsledky již ve formátu pole a tak je vám taky nabídne.
Výhoda tohoto formátu je ta, že s ním pracuje Model, když bude vaše data ukládat. Více opět až příště.
Dnes jsme si řekli lehký úvod k helperům, formulářům. Příště se na ně vrhneme přímo po hlavě a hlavně prakticky – dokončíme naši CRUD aplikaci.