Problém s propojením s databází z Quick Start tutorialu
- Johnny
- Člen | 24
Ahoj,
snažím se udělat si svou první Nette aplikaci podle Quick Startu.
Zasekl jsem se zde: https://doc.nette.org/cs/quickstart
Nastavil jsem správně soubor config.ini, vytvořil i oba modely, ale jakmile
přidám do bootstrapu tento řádek:
dibi::connect(Environment::getConfig(‚database‘));
vše přestane fungovat a hodí mi to Server error 500 od Nette.
Nevíte, prosím, kde je chyba?
Díky moc :)
- Johnny
- Člen | 24
Config.ini:
<?php
;
; SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
;
; If you don't protect this directory from direct web access, anybody will be able to see your passwords.
; https://nette.org/en/security-warning
;
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
;php.session.save_path = "%tempDir%/sessions"
;php.zlib.output_compression = yes
;php.default_charset = "UTF-8"
; services
service.Nette-Security-IAuthenticator = UsersModel
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
[production < common]
; common database connection
database.driver = mysql
database.database = todolist
database.charset = utf8
database.lazy = TRUE
database.host = mujhost
database.username = mojeusername
database.password = mojepassword
[development < production]
; database options in development mode
database.profiler = TRUE
database.username = mojeusername
database.password = mojepassword
?>
bootstrap.php:
<?php
<?php
/**
* My NApplication bootstrap file.
*
* @copyright Copyright (c) 2010 John Doe
* @package MyApplication
*/
// REMOVE THIS LINE
if (!is_file(LIBS_DIR . '/Nette/loader.php')) die('Copy Nette Framework to /libs/ directory.');
// Step 1: Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';
// Step 2: Configure environment
// 2a) enable NDebug for better exception and error visualisation
NDebug::$strictMode = TRUE;
NDebug::enable();
// 2b) load configuration from config.ini file
NEnvironment::loadConfig();
dibi::connect(Environment::getConfig('database'));
// Step 3: Configure application
// 3a) get and setup a front controller
$application = NEnvironment::getApplication();
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
// Step 4: Setup application router
$router = $application->getRouter();
$router[] = new NRoute('index.php', array(
'presenter' => 'Homepage',
'action' => 'default',
), NRoute::ONE_WAY);
$router[] = new NRoute('<presenter>/<action>/<id>', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
// Step 5: Run the application!
$application->run();
?>
- Johnny
- Člen | 24
Pro všechny začátečníky, kterým by toto časem také mohlo dělat
problém:
Zjistil jsem, že chyba byla v tom, že jsem neměl zadávat:
dibi::connect(Environment::getConfig(‚database‘));
ale:
dibi::connect(NEnvironment::getConfig(‚database‘));
Teď to funguje (resp. nehází chybu) takže doufám, že to je OK.
- Johnny
- Člen | 24
Děkuji za rady. Ještě drobný dotaz: To zapnutí Debugu (musel jsem ale dát NDebug) a odkomentování a přepnutí $application->catchExceptions = FALSE; vlastně znamená, že jsem „zapnul laděnku“? Mám to takhle mít zapnuté asi pořád během vytváření aplikace? A poté to vypnout, ať běžní uživatelé nevidí do útrob, že?
- Solution
- Člen | 50
Pokud config.ini obsahuje:
<?php
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
?>
není potřeba dávat require pro dibi(když je ve složce libs), robotloader
si ho natáhne sám.
Ale jde o to, že máš verzi s prefixy, tznm.:
<?php
dibi::connect(Environment::getConfig('database')); //Takhle ne, ale:
dibi::connect(NEnvironment::getConfig('database')); //Takhle by to mělo být
?>
Mělo by to být vše.
Dobré no :-D, tak jsem to měl odeslat dříve, no nic.
Editoval Padik (29. 10. 2010 23:29)
- jansfabik
- Člen | 193
Johnny napsal(a):
Děkuji za rady. Ještě drobný dotaz: To zapnutí Debugu (musel jsem ale dát NDebug) a odkomentování a přepnutí $application->catchExceptions = FALSE; vlastně znamená, že jsem „zapnul laděnku“? Mám to takhle mít zapnuté asi pořád během vytváření aplikace? A poté to vypnout, ať běžní uživatelé nevidí do útrob, že?
Debug si umí sám detekovat, jestli je na produkčním nebo vývojovém
serveru (podle IP adresy). Na vývojovém ti při výjimce vykreslí tu
červenou stránku, na produkčním se ti uloží všechny chyby do složky
log
. Ten odkomentovávat nemusíš.
$application->catchExceptions = TRUE;
předává odchycené
výjimky ErrorPresenteru. Ten je lepší při vývoji zakomentovat.