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,
upravíme tedy boostrap.php. 
Cesta ke složce s logy se nastavuje Debuggeru
Debugger::$logDirectory = __DIR__ . '/../log';
Temp složka se nastavuje Configuratoru
$configurator->setTempDirectory(__DIR__ . '/../temp');
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()
{
$form = new Nette\Application\UI\Form;
$form->addText('test', "Test: ");
$form->addSubmit('sub', "Uložit");
return $form;
}
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ě projdeme tyto kroky:
- Smažeme obsah složky temp/cache
- Zkontrolujeme zda je povolen zápis tam kam má být povolen (tj
log/atemp/ - Zkusíme odkomentovat
RewriteBasev .htaccess - zapneme 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.
Vynutíme si, aby se Debugger choval jako ve vývojovém prostředí (zobrazoval laděnku při chybě)
Debugger::enable(Debugger::DEVELOPMENT);
Zakážeme aplikaci, aby odchytávala výjimky
$application->catchExceptions = FALSE;
Připojení k databázi pomocí dibi a údajů v configu
Mějme v konfiguračním souboru nastaveno:
common:
parameters:
database:
driver: mysql
host: localhost
database: test
user:
password:
services:
connection:
class: DibiConnection(%database%)
Databáze je poté přístupná v presenteru jako
$db = $this->context->connection;
$db->query("SELECT * FROM ...");
Zapnutí dibi profileru
Dibi profiler zapneme jednoduše pomocí konfigurační direktivy
common:
parameters:
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()
{
$form = new Nette\Application\UI\Form;
$form->addHidden('id');
$form->addTextArea('text', "Text: ");
$form->addSubmit('sub', "Uložit");
return $form;
}
public function actionFooEdit($id)
{
//...
$this['fooForm']->setDefaults(array('id' => $id, 'text' => $model->text));
}
V článku Výchozí data pro editační formulář je příklad rozšířen.
Vlastní validace formulářového prvku
protected function createComponentFooForm()
{
$form = new Nette\Application\UI\Form;
$form->addText('test', "Test: ")
->addRule(function ($control) {
return $control->value % 2;
}, "Hodnota test musí být sudé číslo");
return $form;
}
Nastavení class prvku formuláře
protected function createComponentFooForm()
{
$form = new Nette\Application\UI\Form;
$form->addText('test', "Test: ")
->controlPrototype->class('bar');
return $form;
}
Zrušení persistentního parametru
Podíváme se do presenteru, jakou má nastavenou výchozí hodnotu
/** @persistent int */
public $page;
a tu mu předáme při vytváření odkazu
{link someAction 'page' => NULL}
Odkazová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.
Lze také použít latte macra {l} resp. {r} pro
vykreslení levé resp. pravé závorky.
Ruční vykreslování formulářů v šabloně
{form fooForm}
{$form->render('errors')}
{input test} {label test /}<br />
{input send}
{/form}
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();
$template->registerHelper('texy', callback(new Texy(), 'process'));
return $template;
}
Vypnutí automatického odhlašování
// v presenteru
$this->user->setExpiration("+ 365 days", FALSE);
Nezapomeňte, že musíte změnit i expiraci samotné session na vyšší časový interval než je u uživatele
$this->context->session->setExpiration("+ 365 days", FALSE);
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