EN | CS | Přihlásit | Registrovat

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 createComponen­tFooForm jmenuje se její instance fooForm ($this['fooForm'] nebo {control fooForm})

Bílá stránka po nahrání na hosting

Postupně projdu tyto kroky:

  1. Smažu temp
  2. Zkontroluji zda je povolen zápis tam kam má být povolen
  3. Zkusím odkomentovat RewriteBase v .htaccess
  4. 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

zavináčová magie

Lokalizace aplikace

Kompletní lokalizace Nette aplikací – GettextExtrac­tor v2

Dynamické formuláře

Dynamický počet položek ve formuláři

Jak na moduly

Adresářová struktura a moduly


Komentáře Comments feed

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

Login to submit a comment