Problém s připojením dibi
- eximik
- Člen | 43
Zdravím, už týden studuju dokumentaci a návody nette a dnes sem se rozhodl si vytvořit takovej mini projekt, na kterém s ebudu tento framework učit. Nicméně nastala chyba při instalaci dibi. Složku dibi sem nakopíroval do libs/ a do bootstrapu jsem přidal require LIBS_DIR . ‚/dibi/dibi.php‘;
config.ini:
[common]
set.date-timezone = "Europe/Prague"
set.iconv-internal_encoding = "%encoding%"
set.mbstring-internal_encoding = "%encoding%"
; Production site configuration data
[production < common]
set.include_path = "%appDir%/libs;%modelsDir%/;%presentersDir%/"
; Staging site configuration data inherits from production and
; overrides values as necessary
database.driver = mysql
database.database = nette
database.charset = utf8
database.lazy = TRUE
database.host = localhost
database.username = root
database.password =
[development < production]
database.driver = mysql
database.database = nette
database.charset = utf8
database.lazy = TRUE
database.host = localhost
database.username = root
database.password =
Bootstrap.php:
<?php
/**
* Load Nette
*/
require_once dirname(__FILE__) . '/../libs/Nette/loader.php';
//require_once dirname(__FILE__) . '/../app/system/connect_dibi.php';
require LIBS_DIR . '/dibi/dibi.php';
/**
* Configure application
*/
Environment::loadConfig();
/**
* Prepare & setup
*/
Debug::enable();
$application = Environment::getApplication();
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
'id' => NULL,
));
dibi::connect(NEnvironment::getConfig('database'));
/**
* Run!
*/
$application = Environment::getApplication();
$application->run();
A výsledek je chybová hláška: Fatal error: Cannot redeclare class NotImplementedException in D:\developing\_Nette\gwwIS\libs\dibi\dibi.php on line 37…
Peru se s tim dvě hoďky a pořád tomu nepřicházím na kloub… Běží to u mě na NTB na localhostu…
Díky za každou radu…
- eximik
- Člen | 43
smi napsal(a):
V bootstrapu stačí jen loader
require LIBS_DIR . '/Nette/loader.php';
Loader je tak chytrý, že si najde dibi sám a ke spuštění pak stačí jen příkaz
// Start DB (lazy mode) dibi::connect(Environment::getConfig('db')); // ... db connects before start
A všechno by mělo fungovat OK
Class ‚dibi‘ not found
- smi
- Člen | 75
Ty require máš nějak divně. Takhle to bez problému chodí
Bootstrap.php:
use Nette\Debug;
use Nette\Environment;
use Nette\Application\Route;
// 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';
// Enable Nette\Debug for error visualisation & logging
Debug::$strictMode = TRUE;
Debug::enable();
// Load configuration from config.neon file
Environment::loadConfig();
// Configure application
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
// Setup router
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
};
// Start DB (lazy mode)
dibi::connect(Environment::getConfig('database')); // ... db connects before start
// Run the application!
$application->run();
Editoval smi (4. 6. 2011 0:21)
- eximik
- Člen | 43
bootstrap.php ted:
<?php
/**
* Load Nette
*/
require LIBS_DIR . '/Nette/loader.php';
/**
* Configure application
*/
Environment::loadConfig();
/**
* Prepare & setup
*/
Debug::enable();
$application = Environment::getApplication();
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
'id' => NULL,
));
dibi::connect(Environment::getConfig('database'));
/**
* Run!
*/
$application = Environment::getApplication();
$application->run();
Pro jistotu ještě index.php:
<?php
// absolute filesystem path to the web root
define('WWW_DIR', dirname(__FILE__));
// absolute filesystem path to the application root
define('APP_DIR', WWW_DIR . '/../app');
define('LIBS_DIR', WWW_DIR . '/../libs');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
Fatal Error
Class ‚dibi‘ not found
Editoval eximik (4. 6. 2011 0:27)
- 22
- Člen | 1478
musíš ještě nastartovat robotLoader, aby se dibi natáhlo, asi máš 0.9.7 verzi podle starýho bootstrapu, tak do configu dej:
service.Nette-Loaders-RobotLoader.factory = Nette\Configurator::createRobotLoader
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
promaž obsah složky temp
- eximik
- Člen | 43
22 napsal(a):
musíš ještě nastartovat robotLoader, aby se dibi natáhlo, asi máš 0.9.7 verzi podle starýho bootstrapu, tak do configu dej:
service.Nette-Loaders-RobotLoader.factory = Nette\Configurator::createRobotLoader service.Nette-Loaders-RobotLoader.option.directory[] = %appDir% service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir% service.Nette-Loaders-RobotLoader.run = TRUE
promaž obsah složky
temp
pořád nic
- smi
- Člen | 75
Máš ten bootstrap jinak než já, takže bych z kusil ten můj
Ještě máš trochu jinak index.php, tak ti ještě posílám ten
// uncomment this line if you must temporarily take down your site for maintenance
// require '.maintenance.php';
// the identification of this site
define('SITE', '');
// 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');
// absolute filesystem path to the temporary files
define('TEMP_DIR', WWW_DIR . '/../temp');
// load bootstrap file
require APP_DIR . '/bootstrap.php';
A pak už jen mám jiné pořadí parametru v config.ini. Což mi připadá jako blbost, ale já mám tohle
database.server = localhost
database.database =
database.username =
database.password =
database.driver = mysql
database.charset = utf8
database.lazy = TRUE
Pak už nevím
A jakou vlastně používáš verzi ? A se jmenými prostory nebo bez ?
Editoval smi (4. 6. 2011 0:40)
- eximik
- Člen | 43
No tak sem to překopal takhle:
<?php
/**
* Load Nette
*/
require LIBS_DIR . '/Nette/loader.php';
/**
* Configure application
*/
Environment::loadConfig();
/**
* Prepare & setup
*/
Debug::enable();
Debug::dump(Environment::loadConfig());
$application = Environment::getApplication();
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
'id' => NULL,
));
//dibi::connect(Environment::getConfig('database'));
/**
* Run!
*/
$application = Environment::getApplication();
$application->run();
a výsledek:
AmbiguousServiceException
Service named ‚Nette\Loaders\RobotLoader‘ has been already registered.
- smi
- Člen | 75
eximik napsal(a):
No tak sem to překopal takhle:
<?php /** * Load Nette */ require LIBS_DIR . '/Nette/loader.php'; /** * Configure application */ Environment::loadConfig(); /** * Prepare & setup */ Debug::enable(); Debug::dump(Environment::loadConfig()); $application = Environment::getApplication(); $router = $application->getRouter(); $router[] = new Route('index.php', array( 'presenter' => 'login', 'view' => 'login', 'model' => 'login', ), Route::ONE_WAY); $router[] = new Route('<presenter>/<view>/<id>', array( 'presenter' => 'login', 'view' => 'login', 'model' => 'login', 'id' => NULL, )); //dibi::connect(Environment::getConfig('database')); /** * Run! */ $application = Environment::getApplication(); $application->run();
a výsledek:
AmbiguousServiceException
Service named ‚Nette\Loaders\RobotLoader‘ has been already registered.
Co kdybys zkusil trochu poslouchat.
Startujes jinak router a vše co si nastavíš v $application zase přepíšeš, protože tam máš dvakrát příkaz
$application = Environment::getApplication();
Máš to po svém a já taky – mě to chodí a tobě ne. To je prostě karma
Editoval smi (4. 6. 2011 0:49)
- smi
- Člen | 75
eximik napsal(a):
Jo, koukam, ale ani po smazání
$application = Environment::getApplication(); $application->run();
a nechání jen
$application->run();
se neprojeví žádná změna… pořád neexistuje třída dibi
Nejjednodusšší by bylo vzít to moje, podívat se jestli to chodí a pak teprve něco měnit.
Mimichodem, pořád jsi ještě nenapsal jakou máš verzi
- smi
- Člen | 75
eximik napsal(a):
ted mam tvuj boot a index, akorat mam zkočený muj routering… Verze 0.8
Počkej co je verze 0.8 ? To je nějaká dávná historie – já Ti posílám předposlední tedy 2.0 Alfa.
V 2.0 Beta je nějak jinak Environment a to jsem ještě neměl čas prohlédnout.
To s tou verzí 0.8 byl vtípek, že ?
P.S. A lepší je nechat všechno chodící a pak dělat drobné změny – 30 let programování mě to naučilo (nic nevnucuji, jen radím)
Editoval smi (4. 6. 2011 1:10)
- eximik
- Člen | 43
echo Framework::VERSION; mi vyplivlo 0.8 :D
▼
AmbiguousServiceException
Service named 'Nette\Loaders\RobotLoader' has been already registered.
Source file ▼
File: D:\developing\_Nette\gwwIS\libs\Nette\ServiceLocator.php Line: 86
Line 79:
Line 80: } else {
Line 81: throw new InvalidArgumentException('Service must be name, object or factory callback.');
Line 82: }
Line 83:
Line 84: $lower = strtolower($name);
Line 85: if (isset($this->registry[$lower])) {
Line 86: throw new AmbiguousServiceException("Service named '$name' has been already registered.");
Line 87: }
Line 88:
Line 89: if (is_object($service)) {
Line 90: $this->registry[$lower] = $service;
Line 91:
Line 92: } else {
Line 93: $this->factories[$lower] = $service;
Call stack ▼
Nette/Configurator.php (143) source ► ServiceLocator-> addService (arguments ►)
Nette/Environment.php (462) source ► Configurator-> loadConfig (arguments ►)
app/bootstrap.php (18) source ► Environment:: loadConfig ()
document_root/index.php (21) source ► require (arguments ►)
Environment ►
HTTP request ▼
Headers
Host localhost
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 FirePHP/0.5
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language cs,en-us;q=0.7,en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset windows-1250,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Cookie ZDEDebuggerPresent=php,phtml,php3; PHPSESSID=3bhl9k26v3b9m0berq855llm67
x-insight activate
Cache-Control max-age=0
$_GET
empty
$_POST
empty
$_COOKIE
ZDEDebuggerPresent
string(14) "php,phtml,php3"
PHPSESSID
string(26) "3bhl9k26v3b9m0berq855llm67"
HTTP response ►
Report generated at 2011/06/04 01:07:19
http://localhost/_Nette/gwwIS/document_root/
PHP 5.3.5
Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
Nette Framework 0.8 (revision 300 released on 2009/05/04 23:00:50)
- eximik
- Člen | 43
Hmmm tak pes bude zakopanej někde tady:
HTTP response ►
Report generated at 2011/06/04 01:07:19
http://localhost/_Nette/gwwIS/document_root/
PHP 5.3.5
Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1
Nette Framework 0.8 (revision 300 released on 2009/05/04 23:00:50)
Alá poslední řádek O:-))
Co vim ja tak sem sosal ale 0.9.7b stable
Editoval eximik (4. 6. 2011 1:17)
- eximik
- Člen | 43
smi napsal(a):
No, když je to kdovíjaká verze, tak by to chtělo nainstalovat nějakou novější.
Doporučuji 2.0 Alfa nebo Beta
dal sem tam Nette Framework 2.0-beta pro PHP 5.3 se jmennými prostory, ale z nejakyho duvodu tam chybej tridy… treba debug… :/
Fatal error: Class ‚Nette\Debug‘ not found in D:\developing\_Nette\gwwIS\app\bootstrap.php on line 14
- 22
- Člen | 1478
jestli nevrvomocí potřebuješ jet na 0.8, tak si stáhni toto: https://files.nette.org/…8-PHP5.2.zip
v examples je skeleton a tam je i správný bootstrap. Nevim, jestli už bylo
možné cpát nastavení DB do config.ini v té době (já pamatuju nejstarší
verzi 0.9.4), tak si to dej do nějakýho pole a to podstrč to do
dibi::connect()
..howg
edit: Nette 2 beta vs Nette 0.8 = 2 různé frameworky :-)
Editoval 22 (4. 6. 2011 1:33)
- eximik
- Člen | 43
22 napsal(a):
jestli nevrvomocí potřebuješ jet na 0.8, tak si stáhni toto: https://files.nette.org/…8-PHP5.2.zip
v examples je skeleton a tam je i správný bootstrap. Nevim, jestli už bylo možné cpát nastavení DB do config.ini v té době (já pamatuju nejstarší verzi 0.9.4), tak si to dej do nějakýho pole a to podstrč to do dibi::connect()..howg
NeNe, když začínám, tak co nejnovější verzi, at to trápení není zbytečný…
- smi
- Člen | 75
eximik napsal(a):
22 napsal(a):
jestli nevrvomocí potřebuješ jet na 0.8, tak si stáhni toto: https://files.nette.org/…8-PHP5.2.zip
v examples je skeleton a tam je i správný bootstrap. Nevim, jestli už bylo možné cpát nastavení DB do config.ini v té době (já pamatuju nejstarší verzi 0.9.4), tak si to dej do nějakýho pole a to podstrč to do dibi::connect()..howg
NeNe, když začínám, tak co nejnovější verzi, at to trápení není zbytečný…
V tý Betě je to udelaný trošku jinak, zkus si nejdřív 2.0 Alfa a uvidíš, jestli ti to bude chodit. Na Betu asi neseženeš příklady a je opravdu trochu jiná.
- Milo
- Nette Core | 1283
eximik napsal(a):
A výsledek je chybová hláška: Fatal error: Cannot redeclare class NotImplementedException in D:\developing\_Nette\gwwIS\libs\dibi\dibi.php on line 37…
Dibi si tyhle vyjímky definuje samo a proto se pere s Nette. Koukni do dibi zdrojáků. Mohlo by stačit:
require_once LIB_DIR . '/Nette/loader.php'; // Resp. cesty jak máš ty
define('NETTE', 1); // Tohle totiž v nějaké verzi Nette odpadlo, ale dibi s tím stále počítá
- studna
- Člen | 181
eximik napsal(a):
dal sem tam Nette Framework 2.0-beta pro PHP 5.3 se jmennými prostory, ale z nejakyho duvodu tam chybej tridy… treba debug… :/
Fatal error: Class ‚Nette\Debug‘ not found in D:\developing\_Nette\gwwIS\app\bootstrap.php on line 14
Neni to Nette\Debug
ale Nette\Diagnostics\Debugger
,
viz. api https://api.nette.org/…ebugger.html
- eximik
- Člen | 43
Tak sem to nějakým zázračným způsobem zřejmě rozběhl, nahodil sem 2.0 Alpha a poslední dibi verzi, config jsem předělal z .neon na .ini a jeho obsah tak překopal podle manuálu:
[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "UTF-8"
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"
; variables
variable.lang = en
variable.tempDir = %appDir%/temp
variable.logDir = %appDir%/log
; services
service.Nette-Security-IAuthenticator = UsersModel
[common.db]
driver = mysql
hostname = "localhost"
username = "root"
password = ""
database = "nette"
charset = "utf8"
[production < common]
[development < common]
Ovšem zas nastává další problém a to s routováním… Mám:
// Setup router
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'login',
'view' => 'login',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
'id' => NULL,
));};
a po otevření http://localhost/…cument_root/ mě to přesměruje na http://localhost/…cument_root/?… a hodí mi to error že nebyl nalezev v templates/login soubor default.latte, když sem ho vytvořil a nechal prázdný tk se mi načítá pokaždý tahle stánka a vždy mě to na ni přesměruje, kdežto já potřebuju a by se mi našetl @layout a login.phtml v té složce…
- 22
- Člen | 1478
ty, tohle jsou poměrně základní věci, doporučuji ti projít si seriál na zdrojáku a tutoriály nejprve a mezitím můžeš studovat příručku programátora a číst forum. Pak takovéto dotazy už nebudeš pokládat, nehledě na to, že odpovědí na téma routování už je na foru dost.
Ale asi bude nejlepší si počkat na novou dokumentaci.
- 22
- Člen | 1478
řekl bych, že to máš v distribuci v sandboxu..
a tady nějaký čtení https://doc.nette.org/…tion/routing
Editoval 22 (4. 6. 2011 21:34)
- eximik
- Člen | 43
Vím že to s dibi už nijak nesouvisí todle téma ale když už se to tu řeší, nechci zakládat nové…
Mám problém s tim routováním, přečetl jsem to šecko ale furt nechápu, proč mi to načíta .latte soubor s defaultem, a směruje na action=default, když to v routování vůbec nemám?
$application->onStartup[] = function() use ($application) {
$router = $application->getRouter();
$router[] = new Route('index.php', array(
'presenter' => 'login',
'view' => 'login',
), Route::ONE_WAY);
$router[] = new Route('<presenter>/<view>/<id>', array(
'presenter' => 'login',
'view' => 'login',
'model' => 'login',
'id' => NULL,
));};
Jen chci aby po otevření index.php se mi načetl layout /app/templates/login/@layout.phtml a do něho poté layout.phtml (zde je obyčejný přihlašovací formulář) a po odeslání aby už byla otevřená stránka pouze /loged/, kde už se bude zpracovávat samotná adinistrace…
díky