Důvod umístění temp adresáře v app
- VeN
- Člen | 46
spíše je to logické
složka app „se stará“ o aplikaci a co má aplikace nějaký keš a ten se ukládá do temu a furt to patří do app :-)
Mno, aplikací je u mě zdrojový kód, který nemá s bordelem, který aplikace za chodu vytvoří, nic společného. Myslím, že tento přístup se v praxi používá častěji.
- Honza Kuchař
- Člen | 1662
- vytvoříme složku data v rootu
- přidáme do ní složky temp, log, sessions
- do configu do sekce common přidáme tyto řádky:
; Reconfigure directory structure
variable.dataDir = "%appDir%/../data"
variable.tempDir = "%dataDir%/temp"
variable.logDir = "%dataDir%/log"
variable.sessionsDir = "%dataDir%/sessions"
4)v bootstrap.php budeme inicializovat session takto:
$session = Environment::getSession();
// Setup session directory
if($sessDir = Environment::getVariable("sessionsDir")) {
$session->setSavePath($sessDir);
}
- Dále tam mám upravená ErrorPresenter, který mám hodně upravený kvůli AJAXu. Takže v bootstrapu mám: (ano i v development režimu):
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
$application->catchExceptions = TRUE; // itentionally -> @see ErrorPresenter
- ErrorPresenter.php
class ErrorPresenter extends BasePresenter
{
/**
* @param Exception
* @return void
*/
public function renderDefault($exception)
{
if ($this->isAjax()) { // AJAX request? Just note this error in payload.
$this->getPayload()->time = date("r");
$this->getPayload()->message = "Uncaught exception ".get_class($exception)." with code ".$exception->getCode().". Error will be processed and will be sent to administrator.";
$this->getPayload()->success = false;
$this->getPayload()->generator = "This message was generated by ".__CLASS__." in ".Framework::NAME." ".Framework::VERSION;
if(!Environment::isProduction()){
$this->getPayload()->exceptionMessage = $exception->getMessage();
$this->getPayload()->file = $exception->getFile();
$this->getPayload()->line = $exception->getLine();
}
Debug::processException($exception); // and handle error by Nette\Debug
$this->terminate();
} elseif(!Environment::isProduction()) {
// In development mode draw Nette\Debug
Debug::processException($exception, true);
} elseif ($exception instanceof BadRequestException) {
$this->template->title = '404 Not Found';
$this->setView('404'); // load template 404.phtml
} else {
$this->template->title = '500 Internal Server Error';
$this->setView('500'); // load template 500.phtml
Debug::processException($exception); // and handle error by Nette\Debug
}
}
}
Ale pozor, je to poměrně nové a neotestované!
//EDIT: výstup pak dále zpracovávám u klienta, ale to je teď jedno. Hlavní je, že to ty chyby loguje. ;-) U klienta by to zpracované vypadá takto: (ve Firelogu se to samozřejmě objeví taky)
Editoval honzakuchar (16. 4. 2010 23:42)
- odin
- Člen | 50
Jenom doplnim, ze v Netter 0.9 je potreba jeste v bootstrap.php prehodit inicializaci takto
<?php
// Step 2: Configure environment
// 2b) load configuration from config.ini file -> prehozene
Environment::loadConfig();
// 2a) enable Nette\Debug for better exception and error visualisation
Debug::enable();
?>
Ve skeletonu verze 1.0 uz je to v tomto poradi.
- Dr.Diesel
- Člen | 53
odin napsal(a):
Jenom doplnim, ze v Netter 0.9 je potreba jeste v bootstrap.php prehodit inicializaci takto
<?php // Step 2: Configure environment // 2b) load configuration from config.ini file -> prehozene Environment::loadConfig(); // 2a) enable Nette\Debug for better exception and error visualisation Debug::enable(); ?>
Ve skeletonu verze 1.0 uz je to v tomto poradi.
Me osobne se tohle moc nelibi, protoze pri chybe v
Environment::loadConfig()
to pujde mimo aplikacni zachytavani chyb.
Rozdelil bych Debug::enable()
a pak pouze nastaveni logovaciho
souboru dle Environment
//2a)
Debug::enable();
//2b)
Environment::loadConfig();
//2c)
Debug::setLogFile();
//coz by delalo tuto cast Debug::enable():
// logging configuration
if (self::$productionMode && $logFile !== FALSE) {
self::$logFile = 'log/php_error.log';
if (class_exists('NEnvironment')) {
if (is_string($logFile)) {
self::$logFile = NEnvironment::expand($logFile);
} else try {
self::$logFile = NEnvironment::expand('%logDir%/php_error.log');
} catch (InvalidStateException $e) {
}
} elseif (is_string($logFile)) {
self::$logFile = $logFile;
}
ini_set('error_log', self::$logFile);
}
Editoval Dr.Diesel (29. 8. 2010 15:30)