Login | Register | Česká verze

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:

  1. Smažeme obsah složky temp/cache
  2. Zkontrolujeme zda je povolen zápis tam kam má být povolen (tj log/temp/
  3. Zkusíme odkomentovat RewriteBase v .htaccess
  4. 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

Jak na moduly

Adresářová struktura a moduly

Dependency Injection

Dependency Injection


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