Zprovoznění dibi v Nette 2.0

- Lukáš Růžička
 - Člen | 15
 
Ahoj,
po 3 dnech pokusů, které bohužel nevedly k očekávanému výsledku se na
Vás obracím s prosbou o pomoc.
Rozhodl jsem se svůj aktuálně vyvíjený projekt psát kompletně v Nette. Dříve jsem používal ve svých aplikacích Nette Forms a dibi, ale vždy samostatně, nikdy jakou součást Nette FW.
V čem je problém. Nejsem schopen rozběhat Nette 2.0 společně s dibi. Zprovoznění Nette\Database se mi podařilo, ale chci používat dibi.
Našel jsem ZDE návod, který by měl fungovat. Mě se ale bohužel podle něj dibi zprovoznit nepodařilo.
Proto prosím o vzorovou ukázku, jak má vypadat config.neon, připojení k DB v bootsrapu, případně následné vzorové použití v modelu.
Pravděpodovně stačí malá úprava toho, co už mám hotového a kde mi funguje Nette\Database, proto přikládám mé soubory:
config.neon
<?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: # PHP configuration
		date.timezone: Europe/Prague
		# session.save_path: "%tempDir%/sessions"
		# zlib.output_compression: yes
	services:
		robotLoader:
			run: true
		database:
			class: Nette\Database\Connection
			arguments: ['mysql:host=localhost;dbname=dbname', 'login', 'pswd']
		model:
			class: Model
			arguments: ["@database"]
		authenticator:
			factory: ["@model", createAuthenticatorService]
production < common:
development < common:
console < common:
?>
bootstrap.php
<?php
/**
 * My Application bootstrap file.
 */
use Nette\Diagnostics\Debugger,
	Nette\Application\Routers\Route;
// Load Nette Framework
require LIBS_DIR . '/Nette/loader.php';
// Enable Nette\Debug for error visualisation & logging
Debugger::$strictMode = TRUE;
Debugger::enable();
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();
?>
Model.php
<?php
/**
 * Model base class.
 */
class Model extends Nette\Object
{
	/** @var Nette\Database\Connection */
	public $database;
	public function __construct(Nette\Database\Connection $database)
	{
		$this->database = $database;
	}
    	public function getMotivy()
	{
        	return $this->database->table('katalogMotivy');
    	}
}
?>
Používám Nette 2.0 beta php 5.3 a dibi 1.5 rc.
Používám adresářovou strukturu odpovídající sandboxu a primárním
cílem je vypsat na homepage data z DB při použití dibi.
Díky za pomoc, případně navedení.
Lukáš Růžička

- Patrik Votoček
 - Člen | 2221
 
Možná by stálo za to napsat kde přesně je problém. Jinak řečeno co „nefunguje“. (Co to hlásí/nehlásí/dělá/nedělá).
Do vyhledávacího políčka nahoře na této stránce jsem zadal dibi
připojení Nette 2
a heleme se.

- desss
 - Člen | 14
 
byl jsem na tom úplně stejně, taky se mi nelíbilo Nette\Database a chtěl sem používat dibi na kterou sem byl zvyklý z dřívějška. (taky jsem na nette2 přesel teprve nedávno a dříve pracoval s NForms a částečně nette0.9). s pomocí od ostatních se mi povedlo sesmolit následující konfiguraci:
<?php
config.neon
-----------
# 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: # PHP configuration
                date.timezone: Europe/Prague
                # session.save_path: "%tempDir%/sessions"
                zlib.output_compression: yes
                default_charset: "UTF-8"
        services:
                database:
                        class: DibiConnection
                        arguments: [%database%]
                authenticator:
                        class: Authenticator
                authorizator:
                        class: Acl
                robotLoader:
                        run: true
production < common:
        database:
                driver: mysql
                host: mysql5
                database: database
                username: username
                password: password
                profiler: true
                charset: utf8
development < common:
        database:
                driver: mysqli
                host: localhost
                database: db_name
                username: username
                password: password
                profiler: true
                lazy: true
                charset: utf8
bootstrap.php:
--------------
use Nette\Diagnostics\Debugger,
	Nette\Application\Routers\Route;
// Load Nette Framework
$params['libsDir'] = __DIR__ . '/../libs';
require $params['libsDir'] . '/Nette/loader.php';
// Enable Nette Debugger for error visualisation & logging
Debugger::$logDirectory = __DIR__ . '/../log';
Debugger::$strictMode = TRUE;
Debugger::enable();
// Load configuration from config.neon file
$configurator = new Nette\Configurator;
$configurator->container->params += $params;
$configurator->container->params['tempDir'] = __DIR__ . '/../temp';
$container = $configurator->loadConfig(__DIR__ . '/config.neon');
// Connect to database via DIBI
dibi::connect($container->params['database']);
// Setup router
$router = $container->router;
$router[] = new Route('index.php', 'Default:default', Route::ONE_WAY);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Default:default');
// Configure and run the application!
$application = $container->application;
//$application->catchExceptions = TRUE;
$application->errorPresenter = 'Error';
$application->run();
?>
v modelu už žádný připojení nenastavuju, pracuju s databází přes dibi::query, příp. dibi::select

- 22
 - Člen | 1478
 
ta služba database je tam zbytečná, když ses voláním
statického dibi::connect vyhnul použití DI.
jinak stačí v configu toto:
common:
        database:
                profiler: true
                lazy: true
production < common:
	database:
                host: mysql5
		database: database
                user: username
                pass: password
development < common:
	database:
		database: db_name
                user: username
                pass: password
jinak lazy připojení je dobré pro produkci, nejen pro
development.
Editoval 22 (2. 10. 2011 2:52)