Řešení častých dotazů

Nejde mi Nette, zobrazuje se bílá stránka

  1. Spusťte si Requirements Checker a ověřte, zda webhosting podporuje Nette Framework.
  2. Zkontrolujte, zda lze do adresářů temp a log zapisovat. Viz Nastavení práv adresářů.
  3. Zapněte Laděnku natvrdo do vývojového režimu.

Nastavení práv adresářů

Pokud vyvíjíte na Mac OS X nebo na Linuxu (nebo na jakémkoliv jiném systému založeném na Unixu), budete muset nastavit práva zápisu webovému serveru. Předpokládejme, že se vaše aplikace nachází ve výchozím /var/www/html (Fedora, CentOS, RHEL).

cd /var/www/html/MY_PROJECT
chmod -R a+rw temp log

Na některých Linuxech (Fedora, CentOS, …) je standardně zapnutý SELinux. Budete muset patřičně upravit SELinux policies a nastavit správný SELinux security context pro složky temp a log. Pro temp a log nastavíme typ kontextu httpd_sys_rw_content_t, pro zbytek aplikace (a hlavně pro složku app) bude stačit httpd_sys_content_t. Na serveru spusťte:

semanage fcontext -at httpd_sys_rw_content_t '/var/www/html/MY_PROJECT/log(/.*)?'
semanage fcontext -at httpd_sys_rw_content_t '/var/www/html/MY_PROJECT/temp(/.*)?'
restorecon -Rv /var/www/html/MY_PROJECT/

Dále je potřeba povolit SELinux boolean httpd_can_network_connect_db, který ve je výchozím nastavení vypnutý a který povolí Nette připojit se k databázi přes síť. Využijeme k tomu příkaz setsebool a volbou -P provedeme změnu trvale, tzn. po rebootu serveru nás nebude čekat nemilé překvapení:

setsebool -P httpd_can_network_connect_db on

Chyba 404 – stránka nenalezena

1. Zkontrolujte cestu a název souboru šablony – malá/velká písmena, koncovka .latte.

Použití znaků { } v JavaScriptu

Znaky { a } se používají pro zápis Latte značek. Standardně se jako značka bere cokoliv, co následuje za znakem { s výjimkou mezery a uvozovky. Pokud tedy potřebujete vypsat přímo znak { (často například v JavaScriptu), můžete za znakem { dát mezeru (nebo jiný prázdný znak). Tím se vyhnete překladu jakožto značky.

Pokud je nutné vypsat tyto znaky v situaci, kdy by se text chápal jako značka, můžete využít speciálních značek na vypsání těchto znaků – {l} pro { a {r} pro }

{je značka}
{ neni značka }

Nefunguje routování

  1. Záleží, zda je modul v definici routy u presenteru (lze jej změnit, pokud je v URL <presenter>) nebo samostatně (aby byl změněn, musí být v URL <module>).
  2. Zkontrolujte malá/velká písmenka ('Module' => 'Front' fungovat nebude, 'module' => 'Front' ano).
  3. Zkontrolujte, jestli je povolený mod_rewrite.

Některé prohlížeče si pamatují přesměrování, takže po změně routeru je třeba vymazat jejich cache.

Náhodně generovaná hláška open_basedir.

Jde o PHP bug a řeší jej aktualizace na novější verzi PHP.

Pomalá Laděnka

Nastavit Laděnce menší hloubku zanoření do polí a objektů Debugger::$maxDepth a menší délku pro výpis řetězců v Debugger::$maxLen.

Validace MIME-type souboru

Stává se, že validace podle MIME-type nefunguje, resp. vyhodí chybu u souboru, který by měl validací projít. Chyba není na straně Nette Framework. Řešením je instalace knihovny Fileinfo (v PHP 5.3 je nativně podporována a povolena).

Chybí mi knihovna pro AMF, Amazon S3, OpenID, …

Nette Framework nechce být knihovnou, tj. širokým souborem tříd poskytujícím množství služeb, ale frameworkem, tedy uceleným souborem přicházejícím s určitým stylem práce (tzv. Nette-way). Framework je proto relativně malý, ale existuje pro něj řada doplňků, jejich nejucelenější sadou je pak Zend Framework.

Šablona z řetězce

Pokud potřebujete použít šablonu (zvláště pak Latte) uloženou v podobě řetězce (vráceném například z databáze), tak jej nastavte takto.

Jak nastavit server pro hezká URL?

Apache: je potřeba povolit a nastavit rozšíření mod_rewrite v souboru .htaccess:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]

Pro ovlivňování chování Apache soubory .htaccess je třeba mít povolenou direktivu AllowOverride. Toto je v Apache výchozí chování.

nginx: je třeba nastavit přesměrování pomocí direktivy try_files uvnitř bloku location / v konfiguraci serveru.

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

Block location se pro každou filesystémovou cestu smí v bloku server vyskytovat jen jednou. Pokud již v konfiguraci location / máte, přidejte direktivu try_files do něj.