
FAQ aneb časté dotazy
Zde naleznete odpovědi na nejčastěji kladené dotazy. Pokud vám nejsou jasné některé používané pojmy koukněte se do slovníčku pojmů.
Libs & App v document rootu
Některé webhostingové společnosti nedovolují umístit soubory vaší
webové aplikace jinam než do document rootu. 
Jednoduše přesuneme složky app a libs do document_root a
upravíme index.php
<?php
// absolute filesystem path to the web root
define('WWW_DIR', __DIR__);
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/app');
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/libs');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
Nezapomeňte zkontrolovat zda app a libs obsahují .htaccess. Se zákazem přístupu do této složky. Aby vám někdo nemohl přečíst config. (http://example.com/app/config.ini)
Změna adresářové struktury
Základní používaná adresářová struktura vám nemusí zcela vyhovovat.
Potřebujete ji tedy upravit. 
Upravíme tedy config.ini.
; variables
variable.tempDir = "%appDir%/../temp"
variable.logDir = "%appDir%/../log"
Správné vytváření formulářů
Formuláře vytváříme pomocí továrniček na komponenty. Jedná se
o metodu presenteru začínající createComponent.
protected function createComponentFooForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form->addText('test', "Test: ");
$form->addSubmit('sub', "Uložit");
}
I když se metoda v presenteru jmenuje
createComponentFooForm jmenuje se její instance fooForm
($this['fooForm'] nebo {control fooForm})
Bílá stránka po nahrání na hosting
Postupně projdu tyto kroky:
- Smažu temp
- Zkontroluji zda je povolen zápis tam kam má být povolen
- Zkusím odkomentovat
RewriteBasev .htaccess - zapnu laděnku
Zapnutí laděnky na produkčním serveru
Při nasazování aplikace na hosting se nám může hodit dočasně vynutit stejné chování laděnky na jaké jsme zvyklí z vývoje. Upravíme tedy bootstrap.php.
Nette\Debug::enable(Nette\Debug::DEVELOPMENT);
//...
$application = Nette\Environment::getApplication();
$application->catchExceptions = FALSE;
Připojení k databázi pomocí dibi a údajů v configu
Mějme v konfiguračním souboru nastaveno:
; database
[common.database]
driver = mysqli
hostname = "localhost"
username = "root"
password = "xxx"
database = "nette"
charset = "utf8"
K databázi se poté připojíme pomocí:
dibi::connect(Nette\Environment::getConfig('database');
Zapnutí dibi profileru
Dibi profiler zapneme jednoduše pomocí konfigurační direktivy
; database
[common.database]
; ...
profiler = TRUE
Absolutní odkazy
Používáte šablony třeba pro odesílání e-mailu a potřebujete aby odkazy byly absolutní? Lze toho docílit celkem snadno.
<a href="{plink Default:default}">Relativní odkaz</a>
<a href="{plink //Default:default}">Absolutní odkaz</a>
Modelová část aplikace
Nette Framework v současné době nedisponuje jednotnou správou modelové části aplikace. Každý si tuto část implementuje sám.
Nastavení výchozích hodnot formuláře
protected function createComponentFooForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form->addHidden('id');
$form->addTextArea('text', "Text: ");
$form->addSubmit('sub', "Uložit");
}
public function actionFooEdit($id)
{
//...
$this['fooForm']->setDefaults(array('id' => $id, 'text' => $model->text));
}
Vlastní validace formulářového prvku
protected function createComponentFooForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form->addText('test', "Test: ")
->addRule(function ($control) { return $control->value % 2; }, "Hodnota test musí být sudé číslo");
}
Nastavení class prvku formuláře
protected function createComponentFooForm($name)
{
$form = new Nette\Application\AppForm($this, $name);
$form->addText('test', "Test: ")->getControlPrototype()->class = "bar";
}
Zrušení persistentního parametru
/** @persistent int */
public $page = 0; // 0 bude výchozí, tudiž místo URL ?param=whatever&page=0 se vygeneruje jen ?param=whatever
// vynulování persistentního parametru
{link someAction 'page' => NULL}
Okazování v modulech
{* Relativní odkaz na modul *}
{plink Foo:Default:default}
{* Absolutní odkaz na modul *}
{plink :Foo:Default:default}
Použítí {} v šabloně
Latte filter používá {} jako „řídící“ znaky. Pokud
potřebujete v šabloně napsat {} (například u javascriptu)
musíte za { udělat mezeru pak následující část nebude brána
jako makro.
Ruční vykreslování formulářů v šabloně
{control fooForm begin}
{control fooForm errors}
{var form => $control['fooForm']}
{$form['test']->label}
{$form['test']->control}
{control fooForm end}
Texy!
Na statické Texy! je filter:
public function templatePrepareFilters($template)
{
parent::templatePrepareFilters($template);
$texy = new Texy();
$template->registerFilter(callback($texy, 'process'));
}
Na dynamické Texy! je helper:
protected function createTemplate()
{
$template = parent::createTemplate();
$texy = new Texy();
$template->registerHelper('texy', callback($texy, 'process'));
return $template;
}
Jak na snippety
Lokalizace aplikace
Kompletní lokalizace Nette aplikací – GettextExtractor v2
Dynamické formuláře
Dynamický počet položek ve formuláři




thcom | 19. 7. 2010, 20:20 | comment
ahoj, jako cistokrevny zacatecnik jsem se ted dost dlouho potykal s tim, ze v PHP 5.3 na mem ubuntu 10.04 bylo defaultne potlaceno zorazovani chybovych hlasek, z predchozich verzi PHP jsem na to nebyl zvykly, bud jsem uplne mimo a nebo by stalo za to pridat to do FAQ k problemu bile stranky, jedna se o direktivu display_errors v php.ini