Problém s připojením dibi

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
eximik
Člen | 43
+
0
-

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…

22
Člen | 1478
+
0
-

nemáš tam náhodou minifikovanou verzi dibi a normální současně? Protože ta hláška znamená, že třída NotImplementedException už existuje..

lopikol
Začátečník | 75
+
0
-

Něml by si mít místo:

dibi::connect(NEnvironment::getConfig('database'));

toto:

dibi::connect(Environment::getConfig('database'));
eximik
Člen | 43
+
0
-

Právě, že ne…A když smažu to includnutí tak mi to řekne, že dibi třída neexistuje..

Editoval eximik (4. 6. 2011 0:08)

smi
Člen | 75
+
0
-

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

eximik
Člen | 43
+
0
-

lopikol napsal(a):

Něml by si mít místo:

dibi::connect(NEnvironment::getConfig('database'));

toto:

dibi::connect(Environment::getConfig('database'));

Asik jo, ale i po opravě je furt stejná chyba…

eximik
Člen | 43
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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

22
Člen | 1478
+
0
-

pak tedy vydumpuj Debug::dump(Environment::loadConfig())

smi
Člen | 75
+
0
-

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
+
0
-

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
+
0
-

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)

eximik
Člen | 43
+
0
-

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

22
Člen | 1478
+
0
-

@smi: to jako by nemělo ničemu vadit, router, i když to nastaveni těch rout je nějaký divoký a asi to moc routovat nebude, je v proměnné $router už.

Mě by zajímalo, jaktože se 2× startuje robotLoader…můžeš poslat ten dump?

smi
Člen | 75
+
0
-

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

eximik
Člen | 43
+
0
-

ted mam tvuj boot a index, akorat mam zkočený muj routering… Verze 0.8

eximik
Člen | 43
+
0
-

Mě by zajímalo, jaktože se 2× startuje robotLoader…můžeš poslat ten dump?

Jde nějak exportovat?

22
Člen | 1478
+
0
-

ano copy/paste například :-)

smi
Člen | 75
+
0
-

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
+
0
-

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
+
0
-

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)

smi
Člen | 75
+
0
-

No, když je to kdovíjaká verze, tak by to chtělo nainstalovat nějakou novější.

Doporučuji 2.0 Alfa nebo Beta

eximik
Člen | 43
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Ok, apphu 2.0 sem rozeběhl. Ted kam narvat configuraci pro dibi? Ted mi to píše: InvalidArgumentException

Configuration must be array, string or object. search►

Editoval eximik (4. 6. 2011 14:03)

eximik
Člen | 43
+
0
-

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
+
0
-

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.

eximik
Člen | 43
+
0
-

A ta vyjde přibližně kdy?

22
Člen | 1478
+
0
-

mělo být 1.6., takže každou chvíli..

eximik
Člen | 43
+
0
-

ok, jen mohl bys mi ted trošku popsat jak funguje to routování? potřebuju 2 druhy layoutu…

login – přihlašovací tabulka a potom
logged – layout celkové stránky…

Díky moc!

22
Člen | 1478
+
0
-

ř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
+
0
-

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

kravčo
Člen | 721
+
0
-

Založ nové vlákno!